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

如何在Azure DevOps发布流水线的Azure CLI内联脚本中使用变量

问题结论

Azure发布流水线的Azure CLI任务内联脚本完全支持自定义变量,报错的核心原因是脚本语法和运行环境不匹配。

原因分析
  • 语法混用冲突:你本地运行脚本用的是Bash环境,miid=$(az ...)是Bash专属的变量赋值语法,但是你后续命令加了call前缀,这是Windows批处理的专属语法,两种不同脚本环境的语法混写会直接导致解析失败
  • 流水线任务配置不匹配:如果Azure CLI任务选择了Windows代理、脚本类型选择了批处理/PowerShell时,Bash的变量赋值语法无法被识别,系统会把整行变量赋值语句当做可执行命令运行,因此抛出「miid is not recognized as an internal command」报错。
解决方案

方案1:使用Linux代理 + Bash脚本(改动最小,和本地运行逻辑一致)

  • 将Azure CLI任务的运行代理切换为Linux系统(微软托管Ubuntu代理或自助Linux代理),脚本类型选择「Shell」,删掉所有命令前的call前缀,内联脚本直接写:
miid=$(az identity show -g Resourcegroup -n prodaks-agentpool --query "principalId" -o tsv)
az keyvault set-policy -n proddigitalkeyvault1 --key-permissions get --object-id $miid
az keyvault set-policy -n proddigitalkeyvault1 --secret-permissions get --object-id $miid
az keyvault set-policy -n proddigitalkeyvault1 --certificate-permissions get --object-id $miid

方案2:使用Windows代理 + PowerShell脚本

如果必须使用Windows代理运行任务,将脚本类型选择为「PowerShell」,按照PowerShell语法修改变量赋值逻辑,无需加call前缀,脚本内容如下:

$miid = az identity show -g Resourcegroup -n prodaks-agentpool --query "principalId" -o tsv
az keyvault set-policy -n proddigitalkeyvault1 --key-permissions get --object-id $miid
az keyvault set-policy -n proddigitalkeyvault1 --secret-permissions get --object-id $miid
az keyvault set-policy -n proddigitalkeyvault1 --certificate-permissions get --object-id $miid
额外注意事项
  • 你原有脚本中--secret-permission为单数拼写错误,正确参数为复数--secret-permissions,拼写错误会导致权限配置不生效
  • 运行Azure CLI任务的服务主体本身需要具备Key Vault的访问策略编辑权限,否则set-policy命令会抛出权限不足报错

内容的提问来源于stack exchange,提问作者Callum Hester

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:05