使用变量时Az CLI命令返回‘Bad Request’,直接传值则正常
Az CLI启用VM备份时变量传递报错的解决办法
问题重现
你的脚本逻辑大致如下(以Bash为例):
# 获取VM ID存入变量 getID=$(az vm show --resource-group myRG --name myVM --query id) # 传递变量启用备份 az backup protection enable-for-vm --resource-group myRG --vault-name myVault --vm $getID --policy-name myPolicy
直接传入VM ID字符串时命令正常,但用变量传递就返回Bad Request,问题出在--vm参数的变量引用上。
核心原因
变量中可能包含多余的空白字符(换行、空格)或JSON格式的引号(如果没指定输出格式),导致Az CLI无法识别有效的VM ID。直接嵌入命令时,shell会自动处理命令输出的多余空白,而存到变量后若未清理,就会传递无效参数。
解决步骤
1. 确保获取纯净的VM ID
获取ID时指定-o tsv输出格式,直接得到无多余字符的纯文本ID:
# Bash getID=$(az vm show --resource-group myRG --name myVM --query id -o tsv) # PowerShell $getID = az vm show --resource-group myRG --name myVM --query id -o tsv
2. 正确引用变量
- Bash环境:用双引号包裹变量,避免空白字符导致参数拆分:
az backup protection enable-for-vm --resource-group myRG --vault-name myVault --vm "$getID" --policy-name myPolicy - PowerShell环境:对变量做Trim处理,彻底清除多余换行或空格:
$getID = (az vm show --resource-group myRG --name myVM --query id -o tsv).Trim() az backup protection enable-for-vm --resource-group myRG --vault-name myVault --vm $getID --policy-name myPolicy
验证方案
执行变量赋值后,先打印变量内容确认:
# Bash echo "$getID" # PowerShell Write-Output $getID
如果输出是纯净的VM ID字符串(类似/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.Compute/virtualMachines/xxx),再执行备份命令即可正常运行。
内容的提问来源于stack exchange,提问作者Mantra Reborn
相关产品推荐
相关产品推荐

