首页 > 解决方案 > 如何将秘密类型变量传递给脚本?

问题描述

我定义了一些构建定义变量,其中一些我作为秘密类型。

我正在尝试将秘密变量传递$RPASS给 TFS 上的内联 powershell 脚本任务,但它似乎不起作用。

我在这里查看了这篇文章:如何在 VSTS 中添加秘密变量作为任务环境变量

但是,这些示例使用命令行。

是否可以在 powershell 内联任务中传递这样的参数?

$sec = New-Object -TypeName System.Security.SecureString
"$RPASS".ToCharArray()|%{$sec.AppendChar($_)}
$creds = new-object -typename System.Management.Automation.PSCredential -args "$env:USER", $sec
Send-MailMessage -From "tfs@domain.com" -Subject "YAY!" -To "user@domain.com" -Body "$env:DB_NAME" -SmtpServer server.com -Port 25 -Credential $creds

在该帖子中的第二个答案之后,我尝试传递论点

$(RPASS)

参数

然后改变了这一行$arg[0].ToCharArray()|%{$sec.AppendChar($_)}

但这也没有用

[错误]无法索引到空数组。

我尝试将它直接传递到脚本中:

$(RPASS).ToCharArray()|%{$sec.AppendChar($_)}

但这导致了错误:

+ ********.ToCharArray()|%{$sec.AppendChar($_)}
+                                 ~
An expression was expected after '('.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : ExpectedExpression


2019-06-13T00:57:50.7974750Z ##[error]Process completed with exit code 0 and had 1 error(s) written to the error stream.

标签: powershelltfs

解决方案


ConvertTo-SecureString在您的内联脚本中使用:

$securePassword = ConvertTo-SecureString -String "$(RPASS)" -AsPlainText -Force
$creds = [System.Management.Automation.PSCredential]::new($env:USERNAME, $securePassword)

您不需要传递参数,因为 TFS 将解析内联脚本中的变量


推荐阅读