hyper-v虚拟机无内置健康巡检,但可用powershell脚本自动化检查运行状态、集成服务、资源压力、磁盘响应性、检查点数量及来宾服务;示例脚本check-hvhealth.ps1采集关键指标并输出csv日志,建议通过任务计划程序以最高权限定期执行。
hyper-v 虚拟机本身不提供内置的“健康巡检”服务,但可通过 powershell 脚本结合系统指标、运行状态和关键服务响应,实现定期自动化检查。核心思路是:定时采集状态数据 → 判断异常条件 → 记录日志或触发告警/修复动作。
检查哪些健康维度
脚本应覆盖以下可量化、易获取的关键项:
-
运行状态:是否为
Running(而非 Off、Paused、Saved、Critical 或 Crashed) -
集成服务状态:
IntegrationServicesState是否为UpToDate(反映来宾 OS 与 Hyper-V 主机通信是否正常) -
内存与 CPU 压力:通过
Get-Counter查询\Hyper-V VM Vid Memory\Physical Pages Allocated和\Hyper-V Hypervisor Logical Processor(_Total)\% Total Run Time等性能计数器 - 磁盘响应性:检查虚拟硬盘文件(.vhdx/.avhdx)是否存在、未被锁定、路径可访问
-
检查点积压:统计每个 VM 的检查点数量(
Get-VMSnapshot -VMName xxx),过多可能预示存储风险或管理疏漏 -
来宾内服务(可选):若已启用 PowerShell Remoting,可远程执行
Test-NetConnection或检查关键服务(如wuauserv)状态
用 PowerShell 写一个基础巡检脚本
以下是一个轻量级示例,保存为 Check-HVHealth.ps1,无需第三方模块:
# 检查所有运行中虚拟机
$vms = Get-VM | Where-Object State -eq 'Running'
$results = @()
<p>foreach ($vm in $vms) {
$status = [PSCustomObject]@{
VMName = $vm.Name
State = $vm.State
IntegrationServices = $vm.IntegrationServicesState
UptimeHours = [math]::Round(($vm.Uptime.TotalHours), 1)
SnapshotsCount = (Get-VMSnapshot -VMName $vm.Name -ErrorAction SilentlyContinue).Count
}</p><h1>标记异常</h1><p>if ($vm.IntegrationServicesState -ne 'UpToDate') { $status.Note += 'IntSv Outdated; ' }
if ($status.SnapshotsCount -gt 5) { $status.Note += 'Too many checkpoints; ' }
if ($status.UptimeHours -lt 1) { $status.Note += 'Just started; ' }</p><p>$results += $status
}</p><h1>输出到控制台并写入日志</h1><p>$results | Format-Table -AutoSize
$results | Export-Csv -Path "C:\Logs\HV-Health-$(Get-Date -Format 'yyyyMMdd-HHmm').csv" -NoTypeInformation
</p>
注意:首次运行需以管理员身份执行,并确保执行策略允许本地脚本(Set-ExecutionPolicy RemoteSigned -Scope CurrentUser)。
设置定期自动执行
推荐使用 Windows 任务计划程序(Task Scheduler),避免依赖用户登录:
- 创建基本任务 → 触发器设为“每天”或“每小时”
- 操作设为“启动程序”,程序为
powershell.exe,参数填:-ExecutionPolicy Bypass -File "C:\Scripts\Check-HVHealth.ps1" - 在“常规”选项卡勾选“使用最高权限运行”和“不管用户是否登录都要运行”
- 可额外配置“如果任务失败,每隔 X 分钟重试”及“连续失败 Y 次后停止”提升鲁棒性
进阶建议:对接告警与修复
脚本可进一步增强实用性:
-
邮件通知:当发现
State -ne 'Running'或IntegrationServicesState -ne 'UpToDate'时,调用Send-MailMessage发送摘要 -
自动重启故障 VM:对状态为
Off且上次关机非预期的 VM,执行Start-VM;对Paused状态可先Resume-VM -
清理陈旧检查点:添加逻辑,自动删除超过 7 天、名称含
Auto-的检查点(需先确认无业务依赖) - 集成监控平台:将结果输出为 JSON,由 Prometheus + Windows Exporter 或 Zabbix Agent 收集,纳入统一仪表盘











