如何用Azure CLI查询租户内名称第三位为Y的所有VM?
解决Azure租户内跨订阅筛选名称第三位为'Y'的VM问题
核心问题拆解
- 原命令仅作用于当前激活的订阅,无法覆盖租户内所有订阅
- 若当前订阅无符合条件的VM,查询会返回空列表;另外shell环境中,单引号嵌套可能导致JMESPath查询解析异常
实现方案
通过遍历租户所有订阅,逐个执行VM筛选查询,以下是两种主流环境的脚本示例:
Bash 脚本
# 获取租户下所有订阅ID(纯文本格式) subscriptions=$(az account list --query "[].id" -o tsv) # 循环遍历每个订阅,查询符合条件的VM for sub in $subscriptions; do echo "=== 订阅ID: $sub ===" # 用双引号包裹查询语句,避免shell解析单引号出错 az vm list --subscription "$sub" --output table --query "[?name[2] == 'Y']" done
PowerShell 脚本
# 获取租户下所有订阅ID $subscriptions = az account list --query "[].id" -o tsv # 遍历订阅执行查询 foreach ($sub in $subscriptions) { Write-Host "=== 订阅ID: $sub ===" az vm list --subscription $sub --output table --query "[?name[2] == 'Y']" }
关键说明
- 确保已登录Azure CLI并拥有租户内所有订阅的读取权限
- JMESPath索引从0开始,
name[2]对应名称的第三位字符,逻辑正确 - 若需要合并所有结果为统一输出,可将每个订阅的查询结果写入文件,或调整输出格式为JSON后合并
内容的提问来源于stack exchange,提问作者hexatomek
相关产品推荐
相关产品推荐

