将秘密变量转换为PSCredential

时间:2017-03-10 08:46:13

标签: powershell

在我的发行版中,我想运行一个需要PSCredential对象的Powershell DSC脚本。是否有任何“干净”的方法将秘密变量转换为PSCredential对象?

目前我使用:

$secpasswd = ConvertTo-SecureString $secretPasswordParam -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("username", $secpasswd)

并需要将PSDscAllowPlainTextPassword设置为true

更新

运行Invoke-ScriptAnalyzer时,我得到:

PSAvoidUsingPlainTextForPassword    Warning      deploy.ps1 4     Parameter '$secretPasswordParam' should use
                                                                  SecureString, otherwise this will expose sensitive
                                                                  information. See ConvertTo-SecureString for more
                                                                  information.
PSAvoidUsingConvertToSecureStringWi Error        deploy.ps1 21    File 'deploy.ps1' uses ConvertTo-SecureString with
thPlainText                                                       plaintext. This will expose secure information.
                                                                  Encrypted standard strings should be used instead.

由于此消息和设置名为PSDscAllowPlainTextPassword的显式选项的感觉不佳,因此我寻找更清晰的解决方案。

1 个答案:

答案 0 :(得分:1)

我不认为它不是“干净”,因为脚本分析器只是分析该PS文件,它无法分析具有特定上下文的脚本文件。

关于构建/发布的秘密变量,您不能将其输出为纯文本(例如写入输出),除非您将其发送到网站并获取值。

秘密变量是:

  • 使用2048位RSA密钥加密。
  • 未返回给客户。它们会自动从构建或发布的任何日志输出中屏蔽掉。
  • 未解密为环境变量。因此,默认情况下,您的构建步骤运行的脚本和程序不会被访问。
  • 通过构建步骤解密以进行访问。因此,您可以在密码参数中使用它们(例如,将Java应用程序构建和部署到Azure Web应用程序,并将它们显式传递到构建步骤中的脚本或程序中,例如$(password)

如果您不希望其他人在没有密钥的情况下获取实际值,您可以将加密值(例如,通过工具加密)存储在变量中。

有关秘密变量的更多信息,请参阅:Secret Variables