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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:48:34