【问题标题】:How to pass a secret type variable to script?如何将秘密类型变量传递给脚本?
【发布时间】:2019-10-27 13:10:22
【问题描述】:

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

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

我在这里看到了这篇文章:How to add secret variable as task environment variable in 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.

【问题讨论】:

    标签: powershell tfs


    【解决方案1】:

    在内联脚本中使用ConvertTo-SecureString

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

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

    【讨论】:

    • 所以我可以消除这条线? .ToCharArray()|%{$sec.AppendChar($_)}
    • 你不再需要那个了。这两行创建凭证对象,可与 Send-MailMessage cmdlet 一起使用
    【解决方案2】:

    您应该在参数中传递它,但您还需要在脚本中添加一个参数:

    Param (
     [string]$RPASS
    )
    $sec = New-Object -TypeName System.Security.SecureString
    $RPASS.ToCharArray()|%{$sec.AppendChar($_)}
    

    并在“参数”字段中传递变量:

    -RPASS $(RPASS)
    

    你可以看到,如果我只做$RPASS.ToCharArray()我会看到秘密变量:

    【讨论】:

    • 我没有使用参数是因为在线脚本限制为500个字符:/
    • 你可以用更少的字符在一行中完成:Param($RPASS)
    猜你喜欢
    • 2021-09-09
    • 1970-01-01
    • 2017-08-06
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2020-09-29
    相关资源
    最近更新 更多