【问题标题】:Pass argument with quotes to PowerShell script via TeamCity通过 TeamCity 将带引号的参数传递给 PowerShell 脚本
【发布时间】:2015-11-21 15:29:02
【问题描述】:

我们通过 TeamCity 调用 PowerShell 脚本。我们要传递一个包含引号的参数,例如:

Build step       : PowerShell
Script file      : foo/bar/my.ps1
Script arguments : -MyParam "%system.MyParam%"

其中system.MyParam 设置为<xml><elem attr="value"></elem></xml>。不幸的是,这失败了:

无法处理参数MyParam 的参数转换。无法将值“<xml><elem”转换为类型“System.Xml.XmlDocument”。错误:“解析名称时出现意外的文件结尾。第 1 行,...”

有人知道如何正确传递双引号吗?

到目前为止我已经尝试过但没有成功:

  • 只需传递参数
  • 使用双双引号(即 attr=""value"")
  • 使用 PowerShell 的反引号转义机制(即 attr=`"value`")
  • 在整个参数周围使用单引号(仅当值不包含空格时才有效)

【问题讨论】:

    标签: powershell command-line teamcity command-line-arguments teamcity-9.0


    【解决方案1】:

    由于您的问题是输入 XML 字符串包含双引号属性值,因此可能的解决方法可能是使用single-quoted attribute values

    【讨论】:

      【解决方案2】:

      反引号 (`) 是 PSH 转义字符。所以你可以使用"`"" 来传递一个包含双引号字符的字符串。

      您还可以在 PSH 字符串周围使用单引号 - 并且还可以避免表达式插值:'"' 也是带有单个双引号的字符串。

      但请记住,您需要确保启动器(发送参数)和脚本本身的引用都有效:您可能还需要转义转义。

      【讨论】:

      • 反引号不起作用。单引号似乎可以工作,但是,如果 value 包含空格字符,则会失败。还有其他想法吗?
      • @D.R.我想我会看看我是否可以让 Team City 回复已发送的内容。当一个程序正在创建传递给另一个程序的参数时(尤其是使用不同的引用和参数解析规则),当您可以看到每个步骤时是最容易的。
      • 赞成很好的答案,但是,我没有时间 atm 进行调查并使用@ulrichb 提出的替代方案。
      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 2017-10-31
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多