如何修改PowerShell脚本仅返回带快照的虚拟机及对应时间戳
PowerShell脚本调整:仅输出存在快照的Hyper-V虚拟机
现有问题
当前脚本未做快照存在性过滤,执行后会返回环境内全量虚拟机信息,无快照的虚拟机会显示快照数为0、时间戳为空。
原脚本代码:
Get-VM | Format-Table -AutoSize VMName, @{Name="TotalSnapshots";Expression={(Get-VMSnapshot -VM $_ | Measure-Object).Count}},@{Name="TimeStamp";Expression={(Get-VMSnapshot -VM $_ | Select-Object CreationTime).CreationTime}}
原脚本运行效果示例:
调整方案
在管道中增加快照数量判断逻辑,提前过滤掉快照数为0的虚拟机,同时优化时间戳取值逻辑,多快照场景默认展示最新快照的创建时间,修改后代码如下:
Get-VM | Where-Object {(Get-VMSnapshot -VM $_ | Measure-Object).Count -gt 0} | Format-Table -AutoSize ` VMName, @{Name="TotalSnapshots";Expression={(Get-VMSnapshot -VM $_ | Measure-Object).Count}}, @{Name="TimeStamp";Expression={(Get-VMSnapshot -VM $_ | Sort-Object CreationTime -Descending | Select-Object -First 1).CreationTime}}
逻辑说明
- 新增
Where-Object判断块:对每台虚拟机先统计快照总数,仅保留快照数大于0的条目进入后续输出环节,从根源过滤无快照的虚拟机 - 时间戳字段优化:对单台虚拟机的所有快照按创建时间倒序排列,取第一条(最新创建)的快照时间展示,避免多快照场景下取值异常
- 最终输出字段包含:虚拟机名称、对应快照总数、最新快照创建时间戳,无快照的虚拟机不会出现在结果中
内容的提问来源于stack exchange,提问作者alokin123
相关产品推荐
相关产品推荐

