我正在尝试通过Octopus V4部署某些内容,并且在我的项目变量中,我获得了一个密码,其中带有特殊字符$
。
将此Octo变量分配给PowerShell变量将转换字符串,因为PowerShell肯定认为其中包含一个变量。例如,如果我有这个:
azerty$qwerty
我将得出以下结论:
azertyerty
因此,使用适当的凭据启动已部署的服务时,它将无法正常工作。仅作记录:在启动服务之前,我正在项目的部署脚本中使用New-Service
命令创建它。
我在这里和那里读到,我需要使用单引号而不是双引号来使它起作用,但是在这里,我的双手被束缚了,因为我只是从Octopus那里获取变量,因此:
$mypassword = $OctopusParameters["password"]
关于如何保留完整字符串(包括$
)的任何线索吗?
答案 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"