我需要将变量组中的变量加载到一个天蓝色的密钥库中。为了能够关闭密钥库外部网络访问,我们不希望将变量组链接到密钥库。
因此,我开始开发一个powershell脚本,该脚本使用az cli devops扩展列出变量组变量,并将其存储到powershell var中。
然后,我对每个var进行迭代,并尝试以Azure格式$( var )构建var名称,这样我就可以将它与Set-AzKeyVaultSecret一起使用。
问题:似乎必须对Azure管道的变量名进行硬编码,才能将其转换为实际值。
示例:
$pipelineVarEnc = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("$('variablename')"))
不起作用:
$Name = $var.Name
$command = '$pipelineVarEnc = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("$(' + $Name + ')"))'
Invoke-command $command
有人知道如何绕过这个问题吗?
发布于 2022-06-29 05:43:37
请参阅以下PowerShell脚本:
$token = "PAT"
$url="https://dev.azure.com/{ORG}/{PROJECT}/_apis/distributedtask/variablegroups/{VariableGroupID}?api-version=6.0-preview.2"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
ForEach ($variable in $response.variables)
{
#echo $variable
$variablenames = $variable | Get-Member | Where {$_.MemberType -like 'NoteProperty'} | Select-Object -Property name
ForEach ($name in $variablenames.name)
{
$varaiblename = $name
$variablevalue = $variable.$name.value
echo $varaiblename
echo $variablevalue
$Secret = ConvertTo-SecureString -String '$variablevalue' -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName 'xx' -Name '$varaiblename' -SecretValue $Secret
}
}
在PowerShell脚本中,它使用Rest:可变群- Get获取变量组中的所有变量。
我们可以修改响应格式以获得所有变量名。
最后,我们可以根据变量名得到变量值。
在这种情况下,我们可以在没有硬编码的情况下迭代所有变量名称和值。
https://stackoverflow.com/questions/72788368
复制相似问题