如何通过Azure CLI在Bash中查询特定虚拟机的电源状态
在Bash中用Azure CLI查询虚拟机电源状态的方法
要查询Azure虚拟机的电源状态,不用局限于az vm list,可以通过以下几种方式实现,方便在启停VM前做状态校验:
1. 查询单个虚拟机的精准电源状态
使用az vm get-instance-view命令可以获取VM的实例运行状态,这是最可靠的方式:
# 替换成你的资源组和VM名称 az vm get-instance-view --resource-group <你的资源组名> --name <你的VM名称> --query "instanceView.statuses[?code=='PowerState/running'].displayStatus" -o tsv
--query参数用来过滤出电源状态的条目,PowerState/running对应运行状态,换成PowerState/deallocated则对应已停止(资源释放)状态-o tsv输出纯文本格式,方便后续Bash脚本里做判断
2. 批量查询多个虚拟机的电源状态
如果要一次性查看某个资源组或订阅下所有VM的状态,用az vm list结合--query提取内置的powerState字段即可:
# 查询指定资源组下所有VM的名称和电源状态,以表格形式输出 az vm list --resource-group <你的资源组名> --query "[].{VM名称:name, 电源状态:powerState}" -o table # 如果要查询当前订阅下所有VM,去掉--resource-group参数 az vm list --query "[].{VM名称:name, 电源状态:powerState}" -o table
3. 在Bash脚本中校验状态并执行启停操作
下面是两个实用的脚本片段,分别用于启动前检查、停止前检查:
启动VM前确认状态
VM_NAME="test-vm" RESOURCE_GROUP="test-rg" # 获取当前电源状态(运行状态则返回值,否则为空) POWER_STATE=$(az vm get-instance-view --resource-group $RESOURCE_GROUP --name $VM_NAME --query "instanceView.statuses[?code=='PowerState/running'].displayStatus" -o tsv) if [ -z "$POWER_STATE" ]; then echo "VM未运行,开始启动..." az vm start --resource-group $RESOURCE_GROUP --name $VM_NAME else echo "VM已处于运行状态,无需操作" fi
停止VM前确认状态
VM_NAME="test-vm" RESOURCE_GROUP="test-rg" # 检查是否已停止(资源释放状态) POWER_STATE=$(az vm get-instance-view --resource-group $RESOURCE_GROUP --name $VM_NAME --query "instanceView.statuses[?code=='PowerState/deallocated'].displayStatus" -o tsv) if [ -n "$POWER_STATE" ]; then echo "VM已停止并释放资源,无需操作" else echo "VM未停止,开始执行停止并释放资源操作..." az vm deallocate --resource-group $RESOURCE_GROUP --name $VM_NAME fi
注意:如果只是想停止VM但不释放资源,把
az vm deallocate换成az vm stop,对应的PowerState代码换成PowerState/stopped
内容的提问来源于stack exchange,提问作者WhoAmI
相关产品推荐
相关产品推荐

