我正试图通过Octopus V4部署一些东西,在我的项目变量中,我得到了一个密码,其中我有特殊字符$
。
将此Octo变量分配给PowerShell变量将转换字符串,因为PowerShell肯定认为其中存在变量。例如,如果我有这个:
azerty$qwerty
我最终会这样:
azertyerty
因此,当使用适当的凭据启动已部署的服务时,它将无法工作。仅供记录:在启动服务之前,我在项目的部署脚本中使用New-Service
命令创建它。
我在这里和那里读到我需要使用单引号而不是双引号才能使它工作但是我的双手是绑定的,因为我只是从Octopus获取变量:
$mypassword = $OctopusParameters["password"]
有关如何保持完整字符串的任何线索,包括$
?
请参阅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$'
这可能是一个愚蠢的问题,但你已经尝试了这个并且它不起作用?
如果您使用Octopus语法:
$mypassword = $OctopusParameters["password"]
八达通不会替换八达通参数中设定的值。只有在Powershell中直接在双引号中设置密码时,才会出现您预见到的问题,如:
$mypassword = "azerty$qwerty"
如果你在Powershell中这样做,设置它的正确方法是使用tick(`)来转义$,如下所示:
$mypassword = "azerty`$qwerty"