Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops powershell VSTS任务的转义参数_Azure Devops - Fatal编程技术网

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()
函数转义单引号、#和值中的任何其他特殊字符。您可以将这些调用链接在一起,在一行中完成此操作。