Azure DevOps YAML中PowerShell任务布尔变量设置及取值问题
解决Azure DevOps YAML中PowerShell任务输出变量赋值报错问题
错误原因
Azure DevOps会在执行PowerShell脚本之前完成变量替换,直接将$(setOutput.myOutputJobVar)替换为变量的实际值。如果不做处理,替换后的代码会违反PowerShell语法:
- 若变量值为
true,替换后代码变为$a = true,PowerShell会将true当作命令执行,但不存在该cmdlet,因此报错。 - 若变量值为带空格的字符串,替换后会被拆分成多个命令参数,同样触发语法错误。
解决方案
有两种可靠的方式正确获取并使用输出变量:
方法1:用引号包裹变量引用
将$(setOutput.myOutputJobVar)用双引号或单引号包裹,让替换后的值作为字符串赋值给PowerShell变量:
jobs: - job: A steps: - powershell: | Write-Host "##vso[task.setvariable variable=myOutputJobVar;isoutput=true]this is the same job too" name: setOutput - powershell: | # 用双引号包裹变量引用,确保替换后为字符串 $a = "$(setOutput.myOutputJobVar)" # 根据实际变量值调整判断条件 if ($a -eq 'this is the same job too') { $var = "Hello" } else { $var = "" } Write-Host "最终变量值:$var"
方法2:通过环境变量获取
Azure DevOps会将任务输出变量注入到后续任务的环境变量中,命名规则为全大写任务名_全大写变量名,直接读取环境变量即可:
jobs: - job: A steps: - powershell: | Write-Host "##vso[task.setvariable variable=myOutputJobVar;isoutput=true]this is the same job too" name: setOutput - powershell: | # 环境变量名为任务名SETOutput和变量名myOutputJobVar的全大写形式,用下划线连接 $a = $env:SETOUTPUT_MYOUTPUTJOBVAR if ($a -eq 'this is the same job too') { $var = "Hello" } else { $var = "" } Write-Host "最终变量值:$var"
内容的提问来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

