这是一个可行的解决方案,但不太干净:
if [ "$(az vm list -d -o table --query "[?name=='VM_NAME']")" == "$(az vm list -d -o table --query "[?name=='ABSURD_NAME_THAT_CERTAINLY_DOES_NOT_EXIST']")" ];
then
printf "VM DOES NOT EXIST YET"
else
printf "VM ALREADY EXISTS"
fi
我搞不清楚
"$(az vm list -d -o table --query "[?name=='ABSURD_NAME_THAT_CERTAINLY_DOES_NOT_EXIST']")"
返回了什么,这就是为什么我无法缩短这个解决方案。
我当然不是 Bash 脚本方面的专家,我不知道如何将结果转换为十六进制值或类似值以使其可见。
因此,我正在寻找此解决方案的简短版本或其他更简洁的方法。不幸的是,我找不到类似的东西az vm exists
。
答案1
你可能会使用Azure Graph为了做到这一点。
az graph query -q "Resources | where type =~'Microsoft.Compute/virtualMachines' | limit 1"
您可以看一些例子这里。
Resources
| where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+$'
| order by name asc
答案2
我前段时间找到了解决方案。如果没有可用的虚拟机,az vm list 命令的输出显然是空字符串。但您必须使用一个等号而不是两个等号进行比较。
if [ "$(az vm list -d -o table --query "[?name=='VM_NAME']")" = "" ];
then
echo "No VM was found."
else
echo "VM was found."
fi