2017-01-09 73 views
0

晚上好,我正在開發一個C#,它應該可以幫助用戶控制服務器上的虛擬機。 現在我已經創建了創建和清除這些虛擬機的快照的功能,並且希望創建一個函數來列出虛擬機的所有快照,包括視圖選擇的快照參數。附:通過Hyper-V中的Powershell獲取大小到快照

Invoke-Command -ComputerName ServerName -ScriptBlock { Get-VMSnapshot -VMName VMName |Select-Object}

我能夠獲得幾乎所有信息請求,但是快照本身的總規模。

但是我可以用這個命令得到大小:

Invoke-Command -ComputerName ServerName -ScriptBlock {Get-VM -VMName VMName | gci -r -Filter *.avhd*| select @{Name="MB";Expression={$_.Length/1Mb}}, *} 

不要讓兩個結果一起我比較了這兩種的創作時間長達10秒的寬容,把最接近的一個。 (原始我知道),但現在變得更加複雜。

如果我現在使用快照將虛擬機設置爲此狀態,則創建文件的時間會發生變化,因此我之前的方法將完全停止工作。

爲什麼我想知道的是,是否有更好的方法來比較這兩個結果甚至更好,以獲得沒有這種原始比較的快照大小?

在此先感謝您的幫助。

回答

1

以下單行應滿足您的需求。

1)

Get-VM | Sort Name | Get-Snapshot | Where { $_.Name.Length -gt 0 } | Select VM,Name,Created,SizeMB 

2)

Get-VM | Format-Table Name, @{Label="NumSnapshots";Expression={(Get-Snapshot -VM $_ | Measure-Object).Count}}, @{Label="TotalSnapShotSizeMB";Expression={(Get-Snapshot -VM $_ | Measure-Object -Sum SizeMB).Sum}} 

希望它能幫助。

+0

第一個不起作用,因爲快照的信息集不包含自己的大小,不知何故,Hyper-V的創建者似乎並不知道如果您必須使用任何種類的文件。 第二個可悲的是隻返回虛擬機名稱,'NumSnapshots'和'TotalSnapShotSizeMB'列保持空白,同樣大小的一個屏幕截圖將是我所需要的,所有快照的總大小可悲地不會幫助我那麼多。 但是我一定會嘗試和Measure-Object一起玩,這似乎是我的問題的一個潛在解決方案。 – Etaila

+1

@Etaila:稍微調整一下第二個代碼,然後你就可以選擇。我現在沒有可以選擇的基礎。我需要時間來建立一個。希望它有幫助然後 –

+0

@Etaila:接受答案,如果它可以幫助你 –