如何获取VM的实际硬盘内存?

时间:2016-08-22 18:25:34

标签: powershell hyper-v

是否可以获得虚拟机的实际硬盘使用率?

Measure-VM -Name * | select-object -property TotalDiskAllocation

TotalDiskAllocation属性获取分配给VM的总磁盘空间,即使这很有用,我还需要知道实际使用了多少。

例如,如果一个VM有150 GB的已分配内存且它只使用50 GB,那么是否有任何Powershell命令可以提取50 GB?如果是,我将如何将该脚本合并到上面的脚本中?

1 个答案:

答案 0 :(得分:0)

根据您尝试使用Measure-VM,我假设您使用的是Hyper-V。我在我的一个Hyper-V脚本中使用类似的东西:

(Get-VM dechiro1).HardDrives | ForEach {
    $GetVhd = Get-VHD -Path $_.Path
    [pscustomobject]@{
        Name = $_.Name
        Type = $GetVhd.VhdType
        ProvisionedGB = ($GetVhd.Size / 1GB)
        CommittedGB = ($GetVhd.FileSize / 1GB)
    }
}

基本上,对于每个虚拟机的硬盘驱动器,使用Get-VHD获取VHD详细信息,其中包括完整大小和我所称的承诺大小(磁盘上的实际空间)。

示例输出:

Name                                                   Type                 ProvisionedGB                   CommittedGB
----                                                   ----                 -------------                   -----------
Hard Drive on IDE controll...                       Dynamic                            20                    0.00390625
Hard Drive on IDE controll...                       Dynamic                            40                    0.00390625

修改

如果您想从每个VM中提取并将VM名称包含在返回的对象中,并且您更喜欢使用管道表单,则可以使用:

Get-VM | ForEach { $Vm = $_; $_.HardDrives } | ForEach {
    $GetVhd = Get-VHD -Path $_.Path
    [pscustomobject]@{
        Vm = $Vm.Name
        Name = $_.Name
        Type = $GetVhd.VhdType
        ProvisionedGB = ($GetVhd.Size / 1GB)
        CommittedGB = ($GetVhd.FileSize / 1GB)
    }
}