【问题标题】:Get Azure Devops Secret Variable as Plain Text using Powershell使用 Powershell 将 Azure Devops 秘密变量作为纯文本获取
【发布时间】:2021-09-20 00:37:29
【问题描述】:

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

我见过thisthis,经过一些修改,可以以纯文本形式检索密码和 Azure keyvault 机密,但它不适用于 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)}

有没有人设法做到这一点,如果有,您能否提供有关您做了什么的详细信息?

提前致谢。

【问题讨论】:

  • 在您尝试将其更改为纯文本之前,如果您将变量通过管道传递到 Get-Member,那么给出的 TypeName 是什么?
  • @BoogaRoo 当我通过管道传输它时,它显示为常规字符串,因此我需要在一开始就转换为安全字符串。
  • 如果它以星号的形式出现并且是纯字符串,那么再多的转换为安全字符串并返回都无法“恢复”它。我认为你必须想办法把它从 Azure 中去掉。
  • 如果你的秘密被掩盖了——我的意思是打印为******。没关系。它仍然是纯文本,但它掩盖了将其流式传输到日志的值,以确保它不会被泄露。

标签: powershell azure-devops


【解决方案1】:

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

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

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,一切顺利。

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2021-07-14
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多