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

问题描述:

是否有可能获得虚拟机的实际硬盘使用情况?如何获取虚拟机的实际硬盘内存?

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

的TotalDiskAllocation属性获取分配给虚拟机,即使这是有帮助的我还需要知道有多少是真正被使用的总磁盘空间。

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

+1

你是什么意思,“真正被使用”?磁盘是否精简配置?你的意思是客户操作系统在虚拟机内使用的是什么? – TessellatingHeckler

根据您使用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拉,并包括与返回的对象的虚拟机的名称,你更喜欢使用管道的形式,这将工作:

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

如果我需要了解所有虚拟机的详细信息,该怎么办? –

+0

我刚刚更新了一个针对每个虚拟机运行并在输出中包含虚拟机名称的示例。如果你不喜欢管道表单中嵌套的foreach,我可以发布一个使用'normal'foreach循环的例子,我个人比较喜欢这种情况,你在嵌套循环。 –

+0

谢谢!它工作正常。 –