通过 TeamCity 将带引号的参数传递给 PowerShell 脚本
Posted
技术标签:
【中文标题】通过 TeamCity 将带引号的参数传递给 PowerShell 脚本【英文标题】:Pass argument with quotes to PowerShell script via TeamCity 【发布时间】: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`") 在整个参数周围使用单引号(仅当值不包含空格时才有效)【问题讨论】:
【参考方案1】:由于您的问题是输入 XML 字符串包含双引号属性值,因此可能的解决方法可能是使用single-quoted attribute values。
【讨论】:
【参考方案2】:反引号 (`
) 是 PSH 转义字符。所以你可以使用"`""
来传递一个包含双引号字符的字符串。
您还可以在 PSH 字符串周围使用单引号 - 并且还可以避免表达式插值:'"'
也是带有单个双引号的字符串。
但请记住,您需要确保启动器(发送参数)和脚本本身的引用都有效:您可能还需要转义转义。
【讨论】:
反引号不起作用。单引号似乎可以工作,但是,如果 value 包含空格字符,则会失败。还有其他想法吗? @D.R.我想我会看看我是否可以让 Team City 回复已发送的内容。当一个程序正在创建传递给另一个程序的参数时(尤其是使用不同的引用和参数解析规则),当您可以看到每个步骤时是最容易的。 赞成很好的答案,但是,我没有时间 atm 进行调查并使用@ulrichb 提出的替代方案。以上是关于通过 TeamCity 将带引号的参数传递给 PowerShell 脚本的主要内容,如果未能解决你的问题,请参考以下文章