如何获取虚拟机的实际硬盘内存?

How to Get Actual Hard Disk Memory of A VM?

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

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

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

例如,如果虚拟机分配了 150 GB 的内存,但它只使用了 50 GB,是否有任何 Powershell 命令可以提取这 50 GB?如果是,我如何才能将该脚本合并到上面的脚本中?

根据您尝试使用 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 详细信息,包括完整大小和我所说的承诺大小(磁盘上的实际 space)。

示例输出:

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)
    }
}