Azure Pipelines中能否用Get-Variable获取变量库变量?
问题原因
Azure DevOps的流水线变量(包括变量库中的变量)是在PowerShell脚本执行前完成文本替换,而非注入到PowerShell的变量作用域中。你看到的$(foo)会被Azure DevOps预先替换为bar后再传递给PowerShell执行,所以PowerShell运行时根本不存在名为foo的变量,Get-Variable自然无法找到。
解决方案
要实现「变量名本身是变量」的间接取值需求,可以利用Azure DevOps的特性:所有流水线变量会被自动注入为PowerShell的环境变量,命名规则为原变量名转大写,特殊字符替换为下划线(比如foo对应FOO,my.var对应MY_VAR)。
修改后的流水线示例:
variables: - group: HelloWorld stages: - stage: test jobs: - job: displayName: Retrieve variables steps: - task: Powershell@2 displayName: Variable retrieval inputs: targetType: inline verbose: true script: | # 直接访问依然有效 Write-Host "Direct access: $(foo)" # 间接取值:通过环境变量实现 $targetVarName = "foo" # 方式1:PowerShell环境变量语法 $indirectAccess = $env:($targetVarName.ToUpper()) # 方式2:.NET环境变量获取方法(适用于更复杂的场景) # $indirectAccess = [Environment]::GetEnvironmentVariable($targetVarName.ToUpper()) Write-Host "Indirect access: $indirectAccess"
内容的提问来源于stack exchange,提问作者avazula
相关产品推荐
相关产品推荐

