求遍历全订阅获取公网IP及关联资源信息的PowerShell脚本
Azure多订阅公网IP信息批量导出解决方案
需求背景
我们公司拥有约4000个Azure订阅,需要批量获取所有公网IP地址及其关联的资源名称、资源组信息,并导出为Excel或CSV格式。此前使用的脚本仅能显示IP地址,脚本如下:
az login $Subscriptions = Get-AzSubscription foreach ($sub in $Subscriptions) { az network public-ip list --subscription $sub.Name --query "[?ipAddress!=null]|[?contains(ipAddress, '$IP')].[ipAddress]" --output table }
改进后的PowerShell脚本
以下脚本可实现批量收集所有订阅的公网IP及关联资源信息,并导出为CSV格式:
# 登录Azure(未登录时会弹出登录窗口) Connect-AzAccount # 获取所有Azure订阅 $allSubscriptions = Get-AzSubscription # 初始化空数组存储结果 $publicIpResults = @() foreach ($sub in $allSubscriptions) { Write-Host "正在处理订阅: $($sub.Name)" # 切换至当前订阅 Select-AzSubscription -Subscription $sub.Id | Out-Null # 筛选出已分配公网IP的资源 $publicIps = Get-AzPublicIpAddress | Where-Object { $null -ne $_.IpAddress } foreach ($ip in $publicIps) { # 整理需导出的字段 $ipInfo = [PSCustomObject]@{ 订阅名称 = $sub.Name 订阅ID = $sub.Id 公网IP地址 = $ip.IpAddress 资源名称 = $ip.Name 资源组名称 = $ip.ResourceGroupName IP版本 = $ip.PublicIpAddressVersion 分配方式 = $ip.PublicIpAllocationMethod 关联资源ID = $ip.IpConfiguration.Id # 不需要此字段可直接删除 } $publicIpResults += $ipInfo } } # 导出到CSV文件(可自行修改路径) $exportPath = "C:\Azure_PublicIPs_Report.csv" $publicIpResults | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation Write-Host "导出完成,文件路径: $exportPath"
使用注意事项
- 运行前需确保已安装Azure PowerShell模块,未安装可执行:
Install-Module -Name Az -AllowClobber -Scope CurrentUser - 因订阅数量达4000个,脚本运行耗时较长,建议在空闲时段执行
- 如需导出为Excel格式,可将CSV文件用Excel打开后另存为XLSX;或安装
ImportExcel模块(执行Install-Module -Name ImportExcel),将导出代码替换为:$publicIpResults | Export-Excel -Path "C:\Azure_PublicIPs_Report.xlsx" -AutoSize - 若需过滤特定IP段,可在
Where-Object中添加条件,例如筛选192.168开头的IP:Where-Object { $null -ne $_.IpAddress -and $_.IpAddress -like "192.168.*" }
内容的提问来源于stack exchange,提问作者Monu kumar
相关产品推荐
相关产品推荐

