powershell - 如何将秘密类型变量传递给脚本?
问题描述
我定义了一些构建定义变量,其中一些我作为秘密类型。
我正在尝试将秘密变量传递$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.
解决方案
ConvertTo-SecureString
在您的内联脚本中使用:
$securePassword = ConvertTo-SecureString -String "$(RPASS)" -AsPlainText -Force
$creds = [System.Management.Automation.PSCredential]::new($env:USERNAME, $securePassword)
您不需要传递参数,因为 TFS 将解析内联脚本中的变量
推荐阅读
- ios - 有没有办法查询 VoiceOver 转子模式?
- latex - 如何修复页脚低于页面的问题
- javascript - 如何使用 .replace 删除字符串的一部分(如果该部分存在于数组中)?
- python - 使用 np.sums 使这个 for 循环更快的方法
- c - 释放指针数组
- dictionary - 在递归中应用 Haskell 映射函数
- android - React Native Video 不显示播放器
- javascript - 如何在lodash中找到A中的所有元素而不是B中的所有元素?
- julia - 如何在 Julia 中复制文件?
- sockets - 使用 GNAT.Sockets 接收多播流量