使用Powershell将Azure Devops Secret变量获取为纯文本



是否可以使用Powershell任务检索AzDO Library服务器变量并输出为纯文本?我知道我们可以将变量输出到文本文件中,但我的用例需要PS脚本,但没有找到实现它的方法

我看到了这个和这个,经过一些修改,可以以纯文本的形式检索密码和Azure密钥库机密,但它不适用于AzDO机密。

我大部分时间都在尝试这种变体;非秘密";变量保持星号:

$SecurePassword = ConvertTo-SecureString $(testStringSecret) -AsPlainText -Force
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
try {$secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)}
finally {[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)}

有人做到了吗?如果是,你能提供你所做的细节吗?

提前谢谢。

我假设输出指的是管道日志。

一个简单的答案是不,你不能那样做

ADO在日志预处理器中有一个过滤器,可以过滤掉你的秘密。一旦机密被保存为机密,您也无法在UI中将其作为纯文本检索。

但是。。。


。。。你可以发挥创造力。类似这样的东西:

$secret = 'YourSecret'; for($i = 0; $i -lt $secret.Length; $i++){Write-Host "$($secret[$i])"}

带文本输出:

Y
o
u
r
S
e
c
r
e
t

将变量$secret替换为要以纯文本形式显示的机密ID,这样就可以了。

我试图通过将输出更改为水平来提高@KUTlime的建议/破解的可读性。在我的示例中,变量"$secret"应该包含从keyVault检索到的机密。

$secret = "fOoBaR"
Remove-Variable joined -Force -Confirm:$false -ErrorAction SilentlyContinue
for($i = 0; $i -lt $secret.Length; $i++){
if ($joined) {$joined = $($joined+" "+$($secret[$i]))}
else {$joined = $($secret[$i])}
}
Write-output "Secret: >$($joined)<"

输出:

Secret: >f O o B a R<

尖括号用于显示"secret"后面的潜在空格字符。

最新更新