VSTS 版本 - 'runtime' 替换环境变量

VSTS Release - 'runtime' replacement of Environment Variable

我已经在 vsts 中发布了一些环境变量。

其中一个环境变量如下:

#Array
[ { "name":"password", "value":"thisismypassword" }, { ... } ]

但是,我从其中一个 returns 密码的发布任务中获得了一个输出参数。所以我想做一个 'tag' 并在输出参数返回时替换它:

[ { "name":"password", "value":"<Password>" } ]

当我的输出参数返回后,我可以创建一个 powershell 任务来用真实密码替换 'tag'。但是要替换,它应该是字符串或有效的 powershell 数组。如果我直接使用环境变量,它会在第一个 ':' 处中断并显示一条错误消息(因为它不是合法的 powershell command/format);

#This breaks    
$var = $(environment_variable) 

因此我想将其转换为字符串,替换它,将其转换回 json 对象并将其设置回环境变量:

$Setting = ConvertFrom-Json -InputObject '$(environment_variable)'
$Setting = $Setting -replace "<Password>", "$(Output_Password)"

#Tried both below
$Setting_JSON - ConvertTo-Json -InputObject $Setting
$Setting_JNSON = [Newtonsoft.Json.JsonConvert]::SerializeObject($Setting, [Newtonsoft.Json.Formatting]::None)

Write-Host "##vso[task.setvariable variable=$(environment_variable)]$Setting_JSON"

但是这些会产生一个 json 格式不同的字符串,使用这个变量的步骤不理解;

#Output
["@{name=Password;value=thisisapasswordvalue}"]

#Expected (and needed) Output
[ { "name":"password", "value":"thisisapasswordvalue" } ]
#This breaks    
$var = $(environment_variable) 

为此,您可以使用:

$var = $Env:variablename

这对我有效:

$Setting = $env:Var1
$Setting = $Setting -replace "<Password>", "NewValue"