如何通过标签查询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
额外优化建议:
优化你的启停命令:你之前用
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)获取更详细的信息:如果需要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.txtJSON格式输出:如果需要后续用脚本解析查询结果,可以换成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
相关产品推荐
相关产品推荐

