我已经在包含一些环境变量的游戏中发布了。
其中一个环境变量如下:
#Array
[ { "name":"password", "value":"thisismypassword" }, { ... } ]
但是,我从其中一个返回密码的发布任务中获取输出参数。所以我想创建一个'标签'并在输出参数返回时替换它:
[ { "name":"password", "value":"<Password>" } ]
当我的输出参数返回时,我可以创建一个powershell任务,用真实密码替换'tag'。但是要替换它,它应该是字符串或有效的PowerShell数组。如果我直接使用环境变量,它会在第一个':'上打破一条错误消息(因为它不是一个合法的powershell命令/格式);
#This breaks
$var = $(environment_variable)
因此我想将它转换为String,替换它,将其转换回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" } ]
答案 0 :(得分:1)
#This breaks
$var = $(environment_variable)
为此,您可以使用:
$var = $Env:variablename
这适用于我:
$Setting = $env:Var1
$Setting = $Setting -replace "<Password>", "NewValue"