PowerShell远程获取检查点状态清单核心是使用Get-VMCheckpoint配合Invoke-Command;需先启用WinRM、配置信任主机,再通过PSSession调用远程Hyper-V模块列出各VM的检查点名称、创建时间、父检查点及ID等信息。
powershell 远程获取检查点状态清单,核心是使用 get-vmcheckpoint(适用于 hyper-v)或 get-checkpoint(适用于 windows server 2016+ 及 windows 10/11 的 hyper-v 客户端),配合 invoke-command 实现远程调用。
确认目标主机已启用 PowerShell 远程处理
远程执行的前提是目标 Hyper-V 主机已配置 WinRM 并允许远程命令:
- 在目标主机上以管理员身份运行:
Enable-PSRemoting -Force - 确保防火墙放行 WinRM(HTTP 5985 或 HTTPS 5986)
- 若跨域或使用非管理员账户,需额外配置信任主机(
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*")或使用 CredSSP
使用 Invoke-Command 获取远程检查点列表
直接调用远程主机的 Hyper-V 模块获取所有虚拟机及其检查点状态:
$Session = New-PSSession -ComputerName "HV-Server01" -Credential (Get-Credential)
Invoke-Command -Session $Session -ScriptBlock {
Import-Module Hyper-V
Get-VM | ForEach-Object {
$vm = $_
Get-VMCheckpoint -VMName $vm.Name | Select-Object @{
Name="VMName"; Expression={$vm.Name}
}, Name, CreationTime, ParentCheckpointName, Id, @{Name="Status";Expression={"Exists"}}
}
} | Format-Table -AutoSize
Remove-PSSession $Session
说明:该脚本为每台 VM 列出其全部检查点,并附带所属 VM 名称、创建时间、父检查点(如有)、唯一 ID 和固定状态标识。如需导出为 CSV,末尾可加 | Export-Csv "C:\Checkpoints.csv" -NoTypeInformation。
直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。
批量查询多台主机并合并结果
若需统一查看多个 Hyper-V 主机的检查点,可用循环构建会话集合:
$Servers = "HV-Server01", "HV-Server02", "HV-Server03"
$AllCheckpoints = foreach ($server in $Servers) {
$session = New-PSSession -ComputerName $server -ErrorAction SilentlyContinue
if ($session) {
Invoke-Command -Session $session -ScriptBlock {
Get-VM | ForEach-Object {
$vm = $_
Get-VMCheckpoint -VMName $vm.Name | Select-Object @{
Name="Server"; Expression={$using:server}
}, @{
Name="VMName"; Expression={$vm.Name}
}, Name, CreationTime, Id
}
} -ErrorAction SilentlyContinue
Remove-PSSession $session
}
}
$AllCheckpoints | Sort-Object Server, VMName, CreationTime | Format-Table -AutoSize
注意:$using: 用于将本地变量传递进远程脚本块;-ErrorAction SilentlyContinue 避免单台主机不可达中断整个流程。
检查点状态的实际含义与常见误区
PowerShell 默认不直接返回“是否已应用”或“是否处于一致性状态”,而是依赖检查点对象是否存在及属性推断:
-
存在即有效:只要
Get-VMCheckpoint能列出,说明检查点文件完整且未被手动删除 - ParentCheckpointName 为空 表示该检查点是根检查点(即基于当前运行状态创建的第一个检查点)
- 无检查点返回 不代表 VM 没有快照——可能因权限不足、模块未加载,或 VM 处于“保存”“关闭”等非运行态导致部分检查点不可见(Hyper-V 中检查点在 VM 关闭时仍可见,但某些旧版本存在显示延迟)
- 若需判断检查点是否“正在使用中”,可结合
Get-VM -Name X | Select-Object State, CheckpointFileLocation辅助分析

















