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

Azure DevOps发布管道:PowerShell获取KeyVault变量失败问题

问题分析

你当前的代码错误在于:$($kvVar)只是直接引用了循环变量$kvVar的字符串内容(也就是"Key1"、"Key2"这类密钥名称),并没有去解析对应的Azure DevOps管道变量值。$(Key1)是Azure DevOps的管道语法,只能在管道任务的配置字段中直接使用,在PowerShell脚本内部无法直接通过这种方式获取管道变量。

解决方案

Azure DevOps会将管道变量(包括从KeyVault下载的密钥)自动注入为PowerShell的环境变量,命名规则为:原变量名转为大写,非字母数字字符(比如.)替换为下划线。利用这一点,你可以通过读取环境变量来获取密钥值,修正后的代码如下:

$keyVaultList = $keyVaultVariables -split ','
$stringReplacementValues = ""

foreach($kvVar in $keyVaultList)
{ 
    # 将密钥名转换为对应的环境变量名称格式
    $envVarName = $kvVar.Replace('.', '_').ToUpper()
    # 获取环境变量值,也就是对应的KeyVault密钥值
    $val = [Environment]::GetEnvironmentVariable($envVarName)
    
    Write-Host "$kvVar = $val"
    $stringReplacementValues += "$kvVar|$val;" 
}

Write-Host $stringReplacementValues 
补充说明
  • 由于KeyVault密钥属于秘密变量,Azure DevOps会自动掩盖输出中的秘密值,所以Write-Host输出的$val会显示为***,但实际拼接进$stringReplacementValues的是真实的密钥值,传递给控制台应用时可以正常使用。
  • 如果你的密钥名包含其他特殊字符(比如-),需要在Replace方法中补充替换规则,比如$kvVar.Replace('-', '_').Replace('.', '_').ToUpper()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:31:16