2016-08-22 57 views
0

是否有可能獲得虛擬機的實際硬盤使用情況?如何獲取虛擬機的實際硬盤內存?

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

的TotalDiskAllocation屬性獲取分配給虛擬機,即使這是有幫助的我還需要知道有多少是真正被使用的總磁盤空間。

例如,如果虛擬機具有150 GB的分配內存,並且只使用50 GB,是否有任何Powershell命令可以提取50 GB?如果是,我將如何能夠將該腳本合併到上面的腳本中?

+1

你是什麼意思,「真正被使用」?磁盤是否精簡配置?你的意思是客戶操作系統在虛擬機內使用的是什麼? – TessellatingHeckler

回答

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拉,幷包括與返回的對象的虛擬機的名稱,你更喜歡使用管道的形式,這將工作:

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

謝謝!它工作正常。 –

相關問題