2017-01-09 59 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:接受答案,如果它可以帮助你 –