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

如何获取Azure中处于运行状态且特定标签不存在的虚拟机ID

Azure CLI多条件过滤VM ID解决方案

你可以通过以下两种可行方法解决引号冲突问题:


方法1:Bash单引号嵌套转义

Bash单引号字符串内部如果需要插入单引号,使用'\''结构转义即可,既可以保证外层用单引号包裹整个查询避免!触发event not found错误,也可以让JMESPath正常识别单引号包裹的VM running匹配值。
有效命令如下:

az vm list -d --query '[?!not_null(tags.run)] | [?powerState=='\''VM running'\''].id'

转义逻辑:'\''结构中,第一个'关闭外层单引号,\'声明一个转义的单引号字符,最后一个'重新开启外层单引号,最终JMESPath收到的查询语句完全符合语法要求。


方法2:双引号包裹查询+转义!符号

你也可以选择用双引号包裹整个查询,仅对触发bash历史事件匹配的!符号做转义即可,内部的单引号可以直接使用无需额外处理:

az vm list -d --query "[?\!not_null(tags.run)] | [?powerState=='VM running'].id"

扩展:一次性查询所有订阅下符合条件的VM

如果需要覆盖所有订阅的查询需求,可以搭配遍历所有Azure订阅的逻辑实现:

az account list --query [].id -o tsv | while read sub_id; do
  az vm list -d --subscription $sub_id --query '[?!not_null(tags.run)] | [?powerState=='\''VM running'\''].id' -o tsv
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:36:06