Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何将秘密类型变量传递给脚本?_Powershell_Tfs - Fatal编程技术网

Powershell 如何将秘密类型变量传递给脚本?

Powershell 如何将秘密类型变量传递给脚本?,powershell,tfs,Powershell,Tfs,我定义了一些构建定义变量,其中一些是作为secret类型创建的 我正试图将秘密变量$RPASS传递给TFS上的内联powershell脚本任务,但它似乎不起作用 我在这里看了这篇文章: 但是,这些示例使用命令行 在powershell内联任务中可以传递这样的参数吗 $sec = New-Object -TypeName System.Security.SecureString "$RPASS".ToCharArray()|%{$sec.AppendChar($_)} $creds = new-o

我定义了一些构建定义变量,其中一些是作为secret类型创建的

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

我在这里看了这篇文章:

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

在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.

在内联脚本中使用
converttosecurestring

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

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

您应该在参数中传递变量,但还需要在脚本中添加参数:

Param (
 [string]$RPASS
)
$sec = New-Object -TypeName System.Security.SecureString
$RPASS.ToCharArray()|%{$sec.AppendChar($_)}
并在“Arguments”字段中传递变量:

-RPASS $(RPASS)

您可以看到,如果我只执行
$RPASS.tocharray()
操作,我将看到secret变量:

-RPASS $(RPASS)


我不使用param的原因是因为在线脚本限制为500个字符:/n您可以用更少的字符在一行中完成:
param($RPASS)
所以我可以删除这一行。ToCharArray()|%{$sec.AppendChar($|)}您不再需要它了。这两行创建凭证对象,可与Send-MailMessage cmdlet一起使用