【问题标题】:Pass Secret Variable from TFS Build to Powershell script将秘密变量从 TFS 构建传递到 Powershell 脚本
【发布时间】:2017-08-06 22:16:11
【问题描述】:

我在构建定义中添加了名为 Password 的秘密变量,如下图所示:

我想在我的一个构建步骤中将密码传递给 PowerShell 脚本,如下图所示:

我的 PowerShell 脚本如下所示

 Param
(
    [Parameter(Mandatory=$true)]
    [string]$UserName,
    [Parameter(Mandatory=$true)]
    [string]$Password
)

$appPool = New-WebAppPool -Name "test"
$appPool.processModel.userName = $userName
$appPool.processModel.password = $password
$appPool.processModel.identityType = "SpecificUser"
$appPool | Set-Item

但看起来密码的类型不是字符串。我试过PSCredential 但没有用。有人可以帮助我吗?如何将密码从构建步骤传递到 PowerShell 脚本和安全变量的类型?我无法直接读取环境变量,因为我在目标机器上运行 PowerShell 脚本。所以唯一的选择是将密码作为输入传递给脚本。

【问题讨论】:

  • 试试$appPool.processModel.password = (ConvertTo-SecureString -Force -AsPlainText $password)
  • 秘密变量被解密以供您的构建步骤访问。所以你可以在密码参数中使用它们。您在构建过程中是否遇到任何错误?我已经测试了你的脚本,没有出现问题。
  • 但是这个说法是行不通的。 $appPool.processModel.password = (ConvertTo-SecureString -Force -AsPlainText $password)。它的值是 System.Security.SecureString 但不是实际密码。所以apppool没有设置正确的密码。它不知道如何解密。

标签: powershell tfsbuild continuous-deployment


【解决方案1】:

我终于设法解决了。

通过 powershell 脚本参数发送密码时,我在密码周围加上了双引号。繁荣!!它开始工作了。它发送解密后的密码。

-用户名$(用户名)-密码“$(密码)”

我的 power shell 脚本和上面一样。

 Param
(
    [Parameter(Mandatory=$true)]
    [string]$UserName,
    [Parameter(Mandatory=$true)]
    [string]$Password
)

$appPool = New-WebAppPool -Name "test"
$appPool.processModel.userName = $userName
$appPool.processModel.password = $password
$appPool.processModel.identityType = "SpecificUser"
$appPool | Set-Item

【讨论】:

  • "" 对我没有任何改变。在 TFS 2018 中,无论是否使用“”,它似乎都以相同的方式工作。我仍然想知道为什么我不能在参数部分使用“[SecureString]$Password”。
猜你喜欢
  • 2018-03-06
  • 2015-12-18
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多