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

使用变量时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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:22:08