VMware多VC虚拟机报告PowerShell脚本修改需求
修改后的PowerShell脚本
# 定义vCenter FQDN到自定义别名的映射 $vcAliasMap = @{ "vc1.daniel.com" = "VC 生产环境" "vc2.daniel.com" = "VC 测试环境" "vc3.daniel.com" = "VC 开发环境" "vc4.daniel.com" = "VC 灾备环境" "vc5.daniel.com" = "VC 演示环境" } # 要连接的vCenter列表(直接取映射表的键) $vcenters = $vcAliasMap.Keys # 存储所有关机VM的信息 $allVMs = @() # 遍历每个vCenter收集数据 foreach ($vc in $vcenters) { Connect-VIServer -Server $vc -ErrorAction Stop | Out-Null # 获取关机状态的虚拟机 $poweredOffVMs = Get-VM | Where-Object { $_.PowerState -eq "PoweredOff" } # 整理VM信息,保留vCenter FQDN用于后续分组 foreach ($vm in $poweredOffVMs) { $allVMs += [PSCustomObject]@{ vCenterFQDN = $vc VMName = $vm.Name GuestOS = $vm.Guest.OSFullName NumCPUs = $vm.NumCpu MemoryGB = $vm.MemoryGB Folder = $vm.Folder.Name Cluster = $vm.Host.Parent.Name } } Disconnect-VIServer -Server $vc -Confirm:$false } # 导出CSV报告(保留vCenter FQDN用于排查) $allVMs | Export-Csv -Path ".\PoweredOffVMs_Report.csv" -NoTypeInformation -Encoding UTF8 # 构建HTML报告框架 $htmlHeader = @" <!DOCTYPE html> <html> <head> <title>关机状态虚拟机报告</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } h2 { color: #2c3e50; margin-top: 30px; } table { border-collapse: collapse; width: 90%; margin: 10px 0; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } </style> </head> <body> <h1>关机状态虚拟机汇总报告</h1> "@ $htmlBody = "" # 按vCenter分组生成独立表格 $groupedVMs = $allVMs | Group-Object -Property vCenterFQDN foreach ($group in $groupedVMs) { # 获取当前vCenter的自定义别名 $vcAlias = $vcAliasMap[$group.Name] # 添加分组标题 $htmlBody += "<h2>$vcAlias</h2>" # 生成表格(移除vCenterFQDN列) $htmlBody += $group.Group | Select-Object VMName, GuestOS, NumCPUs, MemoryGB, Folder, Cluster | ConvertTo-Html -Fragment } $htmlFooter = @" </body> </html> "@ # 合并并保存HTML报告 $fullHtml = $htmlHeader + $htmlBody + $htmlFooter $fullHtml | Out-File -Path ".\PoweredOffVMs_Report.html" -Encoding UTF8 Write-Host "报告生成完成:CSV和HTML文件已保存到当前目录"
关键修改说明
- 别名映射机制:用哈希表
$vcAliasMap统一管理vCenter FQDN和自定义别名的对应关系,后续维护别名只需修改这个表即可。 - 分组生成独立表格:通过
Group-Object按vCenter FQDN分组,每个分组先输出对应别名的标题,再将分组内的VM数据排除vCenterFQDN列后转换为HTML表格片段,实现按vCenter独立展示。 - CSV保留原始信息:CSV报告仍保留vCenter FQDN字段,方便后续数据排查或二次处理,HTML则只展示用户需要的别名和VM核心信息。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

