可通过powershell批量获取hyper-v或vsphere虚拟机运行状态并导出csv/html报表:hyper-v用get-vm及state属性,vsphere用powercli的get-vm及powerstate字段,支持远程连接、定时任务与样式美化。
可以通过 powershell 连接 hyper-v 或 vsphere 环境,批量获取虚拟机运行状态并导出为报表(如 csv 或 html)。关键在于选择正确的管理模块、连接宿主机/平台,并统一提取状态字段。
使用 Hyper-V 模块获取本地或远程 Hyper-V 虚拟机状态
适用于 Windows Server 或已启用 Hyper-V 的 Windows 10/11。需确保执行权限足够,远程操作需开启 WinRM 和防火墙规则。
- 运行 Get-VM 获取所有 VM 基础信息,State 属性即运行状态(如 Running、Off、Saved)
- 导出为 CSV 报表:
Get-VM | Select-Object Name, State, Uptime, Status | Export-Csv -Path "C:\vm-report.csv" -NoTypeInformation - 若查询远程 Hyper-V 主机,加 -ComputerName HV01 参数;首次连接可能需配置可信主机或使用 CredSSP
使用 VMware PowerCLI 获取 vSphere 虚拟机状态
需提前安装 PowerCLI(Install-Module VMware.PowerCLI -Force -Scope CurrentUser),并关闭证书检查(开发环境)或导入有效证书。
- 连接 vCenter:
Connect-VIServer -Server vcenter.example.com -User administrator@vsphere.local -Password 'xxx' - 获取运行状态(PowerState 是核心字段):
Get-VM | Select-Object Name, PowerState, GuestId, @{N='IP';E={$_.Guest.IPAddress[0]}} | Export-Csv "C:\vsphere-report.csv" - 可加 -Location (Get-Folder "Servers") 限定文件夹范围,避免拉取全部对象
生成带格式的 HTML 报表(通用方法)
适合邮件发送或临时查看,比纯 CSV 更直观。不依赖特定平台,只要数据对象有属性即可渲染。
- 以 Hyper-V 为例,将结果转为 HTML 表格:
Get-VM | Select-Object Name, State, CPUUsage, MemoryAssigned | ConvertTo-Html -Title "Hyper-V VM Status Report" | Out-File "C:\report.html" - 添加样式提升可读性(内联 CSS):
在 ConvertTo-Html 后追加 -Head "" - 支持条件着色:用 PowerShell 预处理对象,添加自定义属性如 StatusColor,再在 HTML 中用 JS 或后端逻辑渲染颜色(基础 HTML 不支持动态样式,建议导出后用 Excel 处理高亮)
定时自动报表(Windows 计划任务示例)
让状态报表每天早上 8 点自动生成并保存到共享目录,减少人工干预。
- 把上述命令保存为 Get-VMReport.ps1,开头加上 Set-ExecutionPolicy Bypass -Scope Process -Force
- 创建计划任务,触发器设为“按预定时间”,操作中启动程序 powershell.exe,参数写:
-File "D:\Scripts\Get-VMReport.ps1" - 务必在“常规”选项卡勾选“不管用户是否登录都要运行”,并启用“不存储密码时只在交互式登录时运行”以外的权限模式











