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

如何通过标签查询Azure虚拟机的电源状态并输出到文件

解决方案:查询带标签的Azure虚拟机状态并输出到文件

看起来你已经有一套Jenkins脚本用来按标签启停VM了,现在要加个状态查询并输出到文件的功能,这很容易实现,我来给你梳理下最佳实践:

首先,要获取VM的运行状态,用az vm list比az resource list更直接——因为resource list不会返回VM的电源状态,而vm list本身就包含这个字段。下面是完整的查询命令:

# 查询带Restart=yes标签的VM状态,输出到表格格式的文件
az vm list --tag Restart=yes --query "[].{Name:name, ResourceGroup:resourceGroup, PowerState:powerState}" --output table > vm_status_report.txt

命令拆解:

  • --tag Restart=yes:精准过滤出带有目标标签的虚拟机
  • --query "[].{Name:name, ResourceGroup:resourceGroup, PowerState:powerState}":用JMESPath语法提取你关心的字段,并重命名成更易读的名称(比如把resourceGroup显示为ResourceGroup)
  • --output table:输出友好的表格格式,适合人工查看
  • > vm_status_report.txt:把结果重定向到指定文件,方便留存或后续查看

如果需要在Jenkins里动态指定标签(比如用你已有的TAG_RESTART变量),可以这样写:

TAG_RESTART="yes"
# 加上日期后缀避免文件被覆盖,方便留存历史记录
az vm list --tag Restart=${TAG_RESTART} --query "[].{Name:name, ResourceGroup:resourceGroup, PowerState:powerState}" --output table > vm_status_$(date +%Y%m%d).txt

额外优化建议:

  1. 优化你的启停命令:你之前用az resource list获取VM ID,其实可以换成az vm list更高效,而且避免表头干扰(table格式会带表头,可能导致命令执行错误),改用tsv格式输出纯ID列表:

    # 启动命令优化版
    az vm start --ids $(az vm list --tag Restart=${TAG_RESTART} --query "[].id" --output tsv)
    # 取消分配命令同理
    az vm deallocate --ids $(az vm list --tag Restart=${TAG_RESTART} --query "[].id" --output tsv)
    
  2. 获取更详细的信息:如果需要VM的位置、ID等额外字段,只需修改--query部分:

    az vm list --tag Restart=yes --query "[].{Name:name, ResourceGroup:resourceGroup, PowerState:powerState, Location:location, VMId:id}" --output table > vm_status_detailed.txt
    
  3. JSON格式输出:如果需要后续用脚本解析查询结果,可以换成JSON格式:

    az vm list --tag Restart=yes --query "[].{Name:name, ResourceGroup:resourceGroup, PowerState:powerState}" --output json > vm_status_report.json
    

最后,确保Jenkins节点上的Azure CLI已经正确配置认证(比如用服务主体登录),这样脚本就能顺利执行啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:15:12