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

如何使用Azure CLI列出指定订阅/资源组下VM及配置信息

实现方法

前置准备

先完成Azure CLI登录和目标订阅切换:

# 未登录时先执行登录
az login
# 切换到指定名称的目标订阅,替换引号内内容为你的订阅名
az account set --subscription "目标订阅名称"

单命令直接输出层级JSON

执行以下命令可直接输出「订阅-资源组-虚拟机」三级结构的JSON,包含VM规格、操作系统、磁盘配置等需要的字段,无需额外依赖:

az vm list --show-details --query "[].{
  resourceGroup: resourceGroup,
  vmName: name,
  vmSpecCode: hardwareProfile.vmSize,
  osType: storageProfile.osDisk.osType,
  osDisk: {
    name: storageProfile.osDisk.name,
    sizeGB: storageProfile.osDisk.diskSizeGB,
    storageType: storageProfile.osDisk.managedDisk.storageAccountType
  },
  dataDiskCount: length(storageProfile.dataDisks),
  dataDisks: [storageProfile.dataDisks[] | {
    name: name,
    sizeGB: diskSizeGB,
    storageType: managedDisk.storageAccountType,
    lun: lun
  }],
  runningStatus: powerState
} | group_by(@, &resourceGroup) | {
  subscriptionName: subscription().displayName,
  subscriptionId: subscription().id,
  resourceGroups: [].{
    resourceGroupName: [0].resourceGroup,
    virtualMachines: @
  }
}" -o json

返回字段说明:

  • vmSpecCode为VM的规格编码(如Standard_D2s_v5),编码和vCPU数、内存大小、临时磁盘配置是固定对应关系,需要对应规格的CPU/内存参数时直接匹配编码即可
  • osType直接返回操作系统类型,取值为Windows或Linux
  • 磁盘字段包含OS盘和所有数据盘的名称、容量、存储类型
  • 如果仅需要查询单个资源组下的VM,在az vm list后追加-g "资源组名称"参数即可,无需遍历全订阅。

可扩展自定义字段的脚本方案

如果需要额外拉取VM的IP、可用区、网卡配置等更多字段,可以用以下带jq处理的bash脚本,可自由增减查询字段:

#!/bin/bash
# 替换为目标订阅名称
TARGET_SUB="目标订阅名称"
az account set -s "$TARGET_SUB"

# 初始化输出JSON结构
RESULT=$(jq -n \
  --arg subName "$(az account show --query name -o tsv)" \
  --arg subId "$(az account show --query id -o tsv)" \
  '{subscriptionName:$subName, subscriptionId:$subId, resourceGroups:[]}')

# 遍历订阅下所有资源组
for rg in $(az group list --query "[].name" -o tsv); do
  # 拉取当前资源组下所有VM的配置信息,可自行增删query内的字段
  vm_data=$(az vm list -g "$rg" --show-details --query "[].{
    vmName: name,
    vmSpecCode: hardwareProfile.vmSize,
    osType: storageProfile.osDisk.osType,
    privateIp: privateIps,
    publicIp: publicIps,
    osDisk: storageProfile.osDisk | {name:name, sizeGB:diskSizeGB, storageType:managedDisk.storageAccountType},
    dataDisks: [storageProfile.dataDisks[] | {name:name, sizeGB:diskSizeGB, storageType:managedDisk.storageAccountType, lun:lun}]
  }" -o json)
  # 追加当前资源组数据到结果
  RESULT=$(echo "$RESULT" | jq \
    --arg rgName "$rg" \
    --argjson vmList "$vm_data" \
    '.resourceGroups += [{resourceGroupName:$rgName, virtualMachines:$vmList}]')
done

# 输出格式化后的最终JSON
echo "$RESULT" | jq .

注意:运行该脚本需要环境安装jq工具(JSON处理组件),Linux/macOS可通过系统包管理器直接安装,Windows可通过winget安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:30:48