如何修改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
相关产品推荐
相关产品推荐

