如何通过PowerShell导出含关联Tag的所有Azure VM详情至Excel
操作步骤
前置依赖安装
先安装两个必需的PowerShell模块,已安装对应模块的可以跳过这步:
# 安装Azure官方资源管理模块 Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force # 安装Excel导出模块,无需本地安装Microsoft Office即可直接生成xlsx格式文件 Install-Module -Name ImportExcel -Scope CurrentUser -Repository PSGallery -Force
完整采集脚本
直接运行以下脚本即可自动拉取当前账号权限范围内所有Azure VM的全量信息,自动整理后导出为Excel报表:
# 登录Azure账号 Connect-AzAccount # 初始化结果存储数组 $vmInventory = @() # 获取当前账号有权限访问的所有订阅 $allSubscriptions = Get-AzSubscription foreach ($sub in $allSubscriptions) { # 切换当前操作上下文到目标订阅 Set-AzContext -Subscription $sub.Id | Out-Null Write-Host "正在采集订阅 $($sub.Name) 下的虚拟机信息..." # 获取当前订阅下所有带电源状态的虚拟机对象 $allVMs = Get-AzVM -Status foreach ($vm in $allVMs) { # 处理Tag字段:将键值对格式的Tag转换为分号分隔的字符串,避免嵌套对象无法直接写入Excel $tagString = if ($vm.Tags.Count -gt 0) { ($vm.Tags.GetEnumerator() | ForEach-Object { "$($_.Key):$($_.Value)" }) -join '; ' } else { "无关联Tag" } # 组装单台VM的采集字段,可根据需要自行增减字段 $vmInfo = [PSCustomObject]@{ VM名称 = $vm.Name 所属资源组 = $vm.ResourceGroupName 所属订阅ID = $sub.Id 所属订阅名称 = $sub.Name 部署区域 = $vm.Location VM规格 = $vm.HardwareProfile.VmSize 操作系统类型 = $vm.StorageProfile.OsDisk.OsType OS映像版本 = $vm.StorageProfile.ImageReference.Offer + " " + $vm.StorageProfile.ImageReference.Sku VM电源状态 = $vm.PowerState 私有IP地址 = (Get-AzNetworkInterface -ResourceId $vm.NetworkProfile.NetworkInterfaces.Id).IpConfigurations.PrivateIpAddress -join ', ' 关联完整Tag = $tagString 采集时间 = Get-Date -Format "yyyy-MM-dd HH:mm:ss" } $vmInventory += $vmInfo } } # 导出Excel文件,默认保存到当前用户桌面,文件名自动带采集日期 $exportPath = Join-Path -Path [Environment]::GetFolderPath("Desktop") -ChildPath "AzureVM全量资产报表_$(Get-Date -Format 'yyyyMMdd').xlsx" $vmInventory | Export-Excel -Path $exportPath -AutoSize -FreezeTopRow -BoldTopRow -WorksheetName "AzureVM清单" Write-Host "采集完成,报表已保存至:$exportPath"
注意事项
- 运行脚本的账号需要对所有目标订阅拥有至少读者权限,否则无法拉取对应订阅下的VM资源信息
- 如果不需要采集私有IP、OS版本等字段,可以直接在
$vmInfo对象配置段删除对应行即可 - 如果本机之前安装过旧版本Az模块,建议先执行
Update-Module -Name Az升级到最新版,避免接口兼容导致的采集报错 - 若业务Tag中包含分号等特殊字符,可以自行修改
$tagString部分的分隔符为其他不冲突的字符
内容的提问来源于stack exchange,提问作者Suri007
相关产品推荐
相关产品推荐

