PowerShell 是 Hyper-V 环境下最直接、最可靠的批量快照信息采集工具,支持结构化查询、CSV 导出、异常筛选及快照链分析,适用于巡检、备份核查与合规审计。
powershell 是 hyper-v 环境下最直接、最可靠的批量快照信息采集工具。它不依赖 gui,能一次性获取所有快照的名称、创建时间、大小、关联虚拟机及状态等核心字段,适合日常巡检、备份核查或合规审计。
快速列出全部虚拟机及其快照概要
以管理员身份运行 PowerShell,执行以下命令即可获得结构化输出:
- Get-VM | ForEach-Object { $_ | Get-VMSnapshot | Select-Object VMName, Name, CreationTime, SizeGB, ParentSnapshotName } | Sort-Object VMName, CreationTime —— 按虚拟机名和创建时间排序,清晰呈现快照层级关系
- 若只关心“最近一次快照”,可加筛选:Get-VM | ForEach-Object { $_ | Get-VMSnapshot | Sort-Object CreationTime -Descending | Select-Object -First 1 | Select-Object VMName, Name, CreationTime, SizeGB }
导出完整快照详情到 CSV 文件
运维中常需归档或跨团队共享,推荐导出为 CSV,方便 Excel 打开分析:
- Get-VM | ForEach-Object { $vm = $_; $_ | Get-VMSnapshot | Select-Object @{n='VMName';e={$vm.Name}}, Name, Id, CreationTime, SizeGB, ParentSnapshotName, Status } | Export-Csv -Path "C:\Reports\AllSnapshots.csv" -NoTypeInformation -Encoding UTF8
- SizeGB 字段由脚本自动计算(原始 Size 字段单位是字节),避免手动换算出错
- 导出含 ParentSnapshotName,可还原快照树结构,识别是否为链式快照
按条件筛选并高亮异常快照
例如:查找超过 7 天未清理的快照,或单个快照体积大于 50GB 的情况:
- Get-VM | Get-VMSnapshot | Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-7) } | Select-Object VMName, Name, CreationTime, SizeGB
- Get-VM | Get-VMSnapshot | Where-Object { $_.Size -gt 50GB } | Select-Object VMName, Name, CreationTime, @{n='SizeGB';e={[math]::Round($_.Size/1GB, 2)}}
- 配合 Write-Host -ForegroundColor Red 可在控制台用红色标出超限项,便于人工复核
附加说明:快照大小与实际磁盘占用的关系
Get-VMSnapshot 返回的 Size 值是该快照差分文件(AVHD/AVHDX)当前占用空间,并非“快照时刻的整机内存+磁盘快照”。同一虚拟机多个快照会形成链式依赖,删除中间快照可能触发合并操作——因此导出信息时建议同步记录快照 ID(Id 属性)和 ParentSnapshotName,便于后续精准定位与操作。

















