You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:37:53