Azure devops Azure DevOps管道失败,因为密码带有特殊字符
我正在使用azure devops构建project server解决方案 在我的发布管道中,我有多个powershell脚本,它们要求用户凭据作为参数。密码保存在DevOps中的一个秘密变量中,并包含一个引号Azure devops Azure DevOps管道失败,因为密码带有特殊字符,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我正在使用azure devops构建project server解决方案 在我的发布管道中,我有多个powershell脚本,它们要求用户凭据作为参数。密码保存在DevOps中的一个秘密变量中,并包含一个引号 Password: abcd'efgh 这导致管道抛出错误:“字符串缺少终止符:” 当我用双引号将密码硬编码到管道中时,脚本执行得非常完美 Argument: -password "abcd'efgh" 当我将DevOps secret变量放在双引号中时,脚本会执行,但在尝试在服务器
Password: abcd'efgh
这导致管道抛出错误:“字符串缺少终止符:”
当我用双引号将密码硬编码到管道中时,脚本执行得非常完美
Argument: -password "abcd'efgh"
当我将DevOps secret变量放在双引号中时,脚本会执行,但在尝试在服务器上进行身份验证时会出现错误,可能是因为传递的密码是“***”
下面是由管道执行的脚本的相关部分。非常感谢您的帮助
param(
$siteUrl,
$username,
$password
)
$encpassword = convertto-securestring -String $password -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
Connect-PnPOnline -Url $siteUrl -Credentials $cred
如何将密码输入脚本?您面临的问题是
$(passwordVariable)
变量引用在脚本主体中展开,然后由Powershell执行。这意味着Powershell会看到变量值并解释其中的特殊字符。
您可以使用Powershell转义字符(`
)在所有特殊字符前面加上前缀,但这并不十分优雅
访问脚本中变量的一种更安全的方法是通过env variables—您在管道中设置的每个变量(名称是大写的,
替换为\ucode>)
对于常规(非加密)变量,您应该:
Do-Something -password "$($env:PASSWORDVARIABLE)"
对于机密(加密)变量,您必须为其环境变量编写脚本。在经典管道中,使用环境
部分。在yaml中,它将如下所示:
- pwsh: |
Do-Something -Password $($env:MAPPED_PASSWORD)
env:
MAPPED_PASSWORD: $(passwordVariable)
有一个警告:不要在映射变量前面加上SECRET\ucode>——这不会起作用,因为这个前缀是由DevOps内部使用的。看看这个扩展:这可能是useful@redleo85我面临着完全相同的情况。你曾经解决过这个问题吗(没有使用市场扩展)?我对@
符号也有同样的问题<代码>”myname@here.com“
转换为”***“
。如果我删除了域信息,就可以了,“myname”
仍然是“myname”
。
- pwsh: |
Do-Something -Password $($env:MAPPED_PASSWORD)
env:
MAPPED_PASSWORD: $(passwordVariable)