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)上面的映射揭示了隐藏在星号后面的字符串。
我们需要在 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 任务的“环境变量”中:

| 归档时间: |
|
| 查看次数: |
6807 次 |
| 最近记录: |