Powershell 访问 Azure DevOps 秘密变量

pir*_*bay 8 powershell azure-devops

我正在尝试从 Powershell 管道脚本中读取 Azure DevOps 秘密变量。Azure 中的变量如下所示:

在此处输入图片说明

我试图访问秘密变量,param例如

[CmdletBinding()]
Param (
    $SecurePassword = $env:Password
)
Run Code Online (Sandbox Code Playgroud)

并简单地作为环境变量,例如

$SecurePassword = $env:Password
Run Code Online (Sandbox Code Playgroud)

不幸的是,使用任何一种方法,该变量都会继续显示为空。

在此处输入图片说明

我访问非秘密变量没有问题。任何帮助将不胜感激。

-----------------------------------------编辑--------- -------------------------------

我在这里找到了文档说明如果在任务的环境部分中明确映射,则秘密可用于管道内的脚本。

在此处输入图片说明

我已经更新了我的 Powershell 任务并尝试将变量映射为两者$(Password)Password但没有任何运气。

在此处输入图片说明

$(Password)上面的映射揭示了隐藏在星号后面的字符串。

使用 $(Password) 返回

pat*_*man 5

我们需要在 Azure DevOps 中创建一个新项目,并且需要将所有管道迁移到新项目。瞧,没有人知道所有的秘密,而导出/导入并不能做到这一点。

我编写了一个脚本将所有环境变量输出到构建摘要旁边的“扩展”选项卡中。它已格式化和一切。

输出秘密的关键是通过在秘密值中插入“<-eliminate->”短语并保存到文件来改变字符串。创建文件后,我们将删除字符串 '<-eliminate->' 的所有实例,保存该文件,并将其作为构建摘要的扩展页面。

我想以某种方式动态地找到所有秘密,但现在手动定义变量名就可以了。

我为这篇文章重新格式化并删除了专有信息,如果它坏了,请告诉我:)

function GetSecretLength ($secretVar){
     $i = 0;
     while($true){
          try { 
               $secretVar.substring(0,$i)|out-null 
          } catch { 
               break
          };
          $i++; 
     }
     if ($i -le 1) { return 1 }
     else { return $i-1 };
} 
function GetSecret($secret){
     $length = GetSecretLength($secret);
     if ($length -ge 2) {
        return $secret.substring(0,$length-1 )+"<-eliminate->"+$secret.substring($length-1,1)
    } elseif ($length -eq 1) {
        return $secret+"<-eliminate->"
    } else {
        return ""
    }
} 

$var = (gci env:*).GetEnumerator() | Sort-Object Name
$out = ""

Foreach ($v in $var) { $out = $out + "`t{0,-28} = {1,-28}`n" -f $v.Name, (GetSecret($v.Value)) }

$fileName = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY\build-variables.md"
write-output "dump variables on $fileName"
set-content $fileName $out

write-output "##vso[task.addattachment type=Distributedtask.Core.Summary;name=Environment Variables;]$fileName"

((Get-Content -path $fileName -Raw) -replace '<-eliminate->', '') | Set-Content -Path $fileName
Run Code Online (Sandbox Code Playgroud)

您必须将所需的秘密变量添加到 Powershell 任务的“环境变量”中: 环境变量

你最终得到了这个漂亮的标签: 在此处输入图片说明

  • 你是个坏人 - 但这有效:D 谢谢!截至目前,在这种情况下没有“扩展”选项卡,而是摘要下的一个部分。 (3认同)