【问题标题】:Escaping parameters for powershell VSTS Taskpowershell VSTS 任务的转义参数
【发布时间】:2018-10-04 03:37:51
【问题描述】:

相关(但不回答此案):VSTS Task Group Powershell Parameter

问题:如何使用双引号和其他可能不舒服的值(例如单引号和双引号以及其他特殊字符的混合)传递参数

我不知道参数可能是什么。所以需要一种有保证的方式来逃避仲裁输入。

比如这样传递参数的时候

-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 ]'.

【问题讨论】:

    标签: azure-devops


    【解决方案1】:

    有两种方法可以解决您当前的问题,第一种是在传递参数时简单地使用单引号,例如:

    -ParamName '$(ParamValue)'

    另一种方法是使用“`”字符(称为反引号、反引号或重音符号)转义参数值中的双引号。所以值从:

    [ "abc=xyz", "abc=somethingelse" ]

    到:

    [ `"abc=xyz`", `"abc=somethingelse`" ]

    这样参数值中的第一个双引号就不会被解释为字符串的结尾。

    【讨论】:

    • 我认为这不能回答问题。假设我无法控制参数值(或者不愿意将这个要求强加给用户)。至于使用单引号,请看原问题——参数也可以有单引号
    • 请注意,我正在寻找通用解决方案 - 没有关于参数的假设,它应该适用于任何值
    • 反引号是 powershell 中的通用转义字符,您可以控制参数的传递方式,因此请使用单引号来防止 $ 字符的变量扩展并使用 $var.replace() 函数来转义单引号、# 和值中的任何其他特殊字符。您可以将这些调用链接在一起以在一行中执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多