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

如何修改PowerShell脚本以导出多IP虚拟机的IP至CSV文件?

修改后的PowerShell脚本(支持多IP导出)

你的现有脚本在网卡存在多个IP配置时,会把所有IP用逗号拼接成单一字符串输出,无法清晰区分每个独立IP。下面是调整后的脚本,会为每个IP单独生成一行记录:

# 替换为你实际需要的CSV输出路径
$reportFile = "C:\vm_multi_ip_report.csv"

# 初始化报告数组
$report = @()

# 获取所有关联了虚拟机的网卡
$nics = Get-AzNetworkInterface | Where-Object { $_.VirtualMachine -ne $null }

foreach ($nic in $nics) {
    # 通过网卡关联的VM资源ID直接获取虚拟机信息,比遍历全量VM更高效
    $vm = Get-AzVM -ResourceId $nic.VirtualMachine.Id
    
    # 遍历网卡的每一项IP配置(适配多IP场景)
    foreach ($ipConfig in $nic.IpConfigurations) {
        $reportDetails = [PSCustomObject]@{
            "虚拟机名称"        = $vm.Name
            "网卡名称"          = $nic.Name
            "私有IP地址"        = $ipConfig.PrivateIpAddress
            "公网IP地址"        = if ($ipConfig.PublicIpAddress) { (Get-AzPublicIpAddress -ResourceId $ipConfig.PublicIpAddress.Id).IpAddress } else { "无" }
        }
        $report += $reportDetails
    }
}

# 控制台输出表格预览并导出CSV
$report | Sort-Object 虚拟机名称 | Format-Table 虚拟机名称, 网卡名称, 私有IP地址, 公网IP地址
$report | Export-Csv -NoTypeInformation -Path $reportFile -Encoding UTF8

核心调整说明:

  • 新增遍历网卡的IpConfigurations集合,每个IP单独生成一条记录,彻底解决多IP合并显示的问题
  • 优化虚拟机查询逻辑,直接通过网卡绑定的VM资源ID获取信息,大幅提升脚本执行效率
  • 可选新增公网IP字段,自动识别网卡是否绑定公网IP并导出,无绑定则显示"无"
  • 使用[PSCustomObject]构建记录,比原Select-Object写法更直观高效
  • 导出CSV时指定UTF8编码,避免中文内容乱码

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:35:24