使用包含$作为密码的变量

时间:2019-02-20 11:16:50

标签: powershell octopus-deploy

我正在尝试通过Octopus V4部署某些内容,并且在我的项目变量中,我获得了一个密码,其中带有特殊字符$

将此Octo变量分配给PowerShell变量将转换字符串,因为PowerShell肯定认为其中包含一个变量。例如,如果我有这个:

azerty$qwerty

我将得出以下结论:

azertyerty

因此,使用适当的凭据启动已部署的服务时,它将无法正常工作。仅作记录:在启动服务之前,我正在项目的部署脚本中使用New-Service命令创建它。

我在这里和那里读到,我需要使用单引号而不是双引号来使它起作用,但是在这里,我的双手被束缚了,因为我只是从Octopus那里获取变量,因此:

$mypassword = $OctopusParameters["password"]

关于如何保留完整字符串(包括$)的任何线索吗?

2 个答案:

答案 0 :(得分:4)

请参阅About Quoting Rules,因为这可能会有所帮助。

当您将字符串括在单引号中(单引号字符串)时,该字符串将在您键入时完全传递给命令。不执行替换。当将字符串用双引号引起来时(双引号引起来的字符串),在将字符串传递给命令进行处理之前,用美元符号($)开头的变量名将被变量的值替换。

请参见以下有关此行为的示例:

PS> $for = "my string"

PS> "test$for"
testmy string

PS> 'test$for'
test$for

章鱼可能有自己的应对方式。我会尝试在字符串周围使用双单引号,看看是否有帮助,例如''my$string''

我也确实在一个论坛上读到有人使用以下cmdlet作为密码成功了:

Set-OctopusVariable -Name 'password' -Value 'password123$'

答案 1 :(得分:1)

这可能是一个愚蠢的问题,但是您是否已经尝试过了却没有奏效?

如果您使用八达通使用以下语法:

$mypassword = $OctopusParameters["password"]

章鱼将不会替代章鱼参数中设置的值。仅当您直接在Powershell中用双引号设置密码时,才会出现预见的问题,例如:

$mypassword = "azerty$qwerty"

如果您是在Powershell中执行此操作,则正确的设置方法是使用$($)转义$,如下所示:

$mypassword = "azerty`$qwerty"