Azure devops powershell VSTS任务的转义参数
相关(但不回答此案例): 问题:如何使用双引号和其他可能不舒服的值(如单引号和双引号以及其他特殊字符的混合)传递参数 我不知道参数可能是什么。因此,我们需要一种有保证的方法来逃避仲裁输入 例如,当像这样传递参数时Azure devops powershell VSTS任务的转义参数,azure-devops,Azure Devops,相关(但不回答此案例): 问题:如何使用双引号和其他可能不舒服的值(如单引号和双引号以及其他特殊字符的混合)传递参数 我不知道参数可能是什么。因此,我们需要一种有保证的方法来逃避仲裁输入 例如,当像这样传递参数时 -ParamName "$(ParamValue)" 值是这样的: [ "abc=xyz", "abc=somethingelse" ] 我得到以下信息: 2018-10-03T17:51:53.3159259Z Generating script. 2018-10-03T17:5
-ParamName "$(ParamValue)"
值是这样的:
[ "abc=xyz", "abc=somethingelse" ]
我得到以下信息:
2018-10-03T17:51:53.3159259Z Generating script.
2018-10-03T17:51:53.3257527Z Formatted command: . 'M:\<...>\blah.ps1' -ParamName "[ "abc=xyz", "abc=somethingelse" ]" <...>
2018-10-03T17:51:53.3969661Z ##[command]"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'M:\...\_temp\14d05e56-d7c7-4db9-8007-a29f5b024b51.ps1'"
2018-10-03T17:51:53.7924531Z M:\<...>\blah.ps1 : A
2018-10-03T17:51:53.7924970Z positional parameter cannot be found that accepts argument 'abc=xyz, abc=somethingelse ]'.
2018-10-03T17:51:53.3159259Z生成脚本。
2018-10-03T17:51:53.3257527Z格式化命令:。'M:\\blah.ps1'-ParamName“[“abc=xyz”,“abc=somethingelse”]
2018-10-03T17:51:53.3969661Z##[命令]“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”-NoLogo-NoProfile-NonInteractive-ExecutionPolicy Unrestricted-command”“'M:\…\ \u temp\14d05e56-d7c7-4db9-8007-a29f5b024b51.ps1”
2018-10-03T17:51:53.7924531Z M:\\blah.ps1:A
2018-10-03T17:51:53.7924970Z找不到接受参数“abc=xyz,abc=somethingelse]”的位置参数。
有两种方法可以解决您当前的问题第一种方法是在传递参数时使用单引号,例如:
-ParamName'$(ParamValue)
另一种方法是使用“`”字符(称为backtick、backquote或grave重音)转义参数值中的双引号。因此,该值从:
[“abc=xyz”,“abc=somethingelse”]
致:
这样,参数值中的第一个双引号就不会被解释为字符串的结尾。我认为这并不能回答问题。让我们假设我无法控制参数值(或者不愿意将该要求强加给用户)。关于使用单引号,请参阅原始问题-参数可以有单引号-请注意,我正在寻找通用解决方案-对参数没有任何假设,它应该适用于任何值。反勾号是powershell中的常规转义字符,您可以控制参数的传递方式,因此,使用单引号防止变量扩展为$字符,并使用$var.replace()
函数转义单引号、#和值中的任何其他特殊字符。您可以将这些调用链接在一起,在一行中完成此操作。