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

求助:用PowerShell调用Az CLI编写脚本获取Azure全租户Windows VM信息

PowerShell + Az CLI 批量导出Azure租户下所有Windows虚拟机信息

所需Az CLI命令说明

  • az account list:获取租户下所有启用状态的订阅
  • az vm list:筛选订阅内所有Windows虚拟机(包含已停止/解除分配状态)
  • az vm get-instance-view:获取VM的操作系统详细版本信息
  • az vm get-patch:获取VM的最新补丁部署状态及相关信息

完整脚本实现

# 设置目标租户ID
$tenantId = "xxxx-xxxx-xxxx-xxxx"

# 登录目标租户(未登录时执行)
az login --tenant $tenantId

# 获取租户下所有启用状态的订阅
$subscriptions = az account list --tenant $tenantId --query "[?state=='Enabled'].{id:id, name:name}" -o json | ConvertFrom-Json

# 初始化结果存储数组
$vmResults = @()

# 遍历每个订阅
foreach ($sub in $subscriptions) {
    Write-Host "正在处理订阅:$($sub.name) ($($sub.id))"
    # 切换到当前订阅上下文
    az account set --subscription $sub.id

    # 获取当前订阅下所有Windows虚拟机
    $vms = az vm list --query "[?storageProfile.osDisk.osType=='Windows'].{name:name, resourceGroup:resourceGroup, id:id}" -o json | ConvertFrom-Json

    # 遍历每个虚拟机
    foreach ($vm in $vms) {
        Write-Host "  正在查询VM:$($vm.name)"
        # 获取VM实例视图(含OS版本信息)
        $instanceView = az vm get-instance-view --name $vm.name --resource-group $vm.resourceGroup --query "{osName:osName, osVersion:osVersion}" -o json | ConvertFrom-Json
        # 获取VM补丁信息
        $patchInfo = az vm get-patch --name $vm.name --resource-group $vm.resourceGroup --query "{lastPatchTime:lastPatchInstallationDateTime, patchState:patchState}" -o json | ConvertFrom-Json

        # 组装结果对象
        $vmRecord = [PSCustomObject]@{
            订阅名称       = $sub.name
            订阅ID         = $sub.id
            资源组名称     = $vm.resourceGroup
            虚拟机名称     = $vm.name
            操作系统       = $instanceView.osName
            OS版本         = $instanceView.osVersion
            最后补丁安装时间 = $patchInfo.lastPatchTime
            补丁状态       = $patchInfo.patchState
            补丁状态说明   = switch ($patchInfo.patchState) {
                'Completed' { "已完成最新补丁安装" }
                'Failed' { "补丁安装失败" }
                'InProgress' { "补丁安装中" }
                default { "未检测到补丁记录" }
            }
        }

        $vmResults += $vmRecord
    }
}

# 控制台输出表格并导出CSV
$vmResults | Format-Table -AutoSize
$vmResults | Export-Csv -Path "Azure_Windows_VMs_Report.csv" -NoTypeInformation -Encoding UTF8

关键字段说明

  • 订阅信息:从az account list获取name(订阅名称)和id(订阅ID),确保VM归属关系清晰
  • 操作系统/版本:通过az vm get-instance-view的osName(如Windows Server 2019 Datacenter)和osVersion(如10.0.17763.4377)获取,比az vm list返回的信息更精准
  • 补丁信息:使用az vm get-patch的lastPatchInstallationDateTime(最后一次补丁安装时间)和patchState(补丁部署状态),如需具体补丁列表,可调整--query参数提取patches字段内容

注意事项

  • 需安装最新版Az CLI,避免旧版本命令兼容性问题,安装命令:Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'
  • 执行脚本的账号需拥有租户内所有订阅的虚拟机读取权限和更新管理权限
  • 订阅数量较多时脚本执行时间较长,建议在非高峰时段运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:55:19