通过 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章

将带参数的函数传递给Python中的另一个函数?

如何将带参数的函数传递给Angular中的内部组件

使用 Python 将包含双引号的参数传递给子进程

使用引号将参数传递给 SQL Server SP

我可以通过 add_action 将参数传递给我的函数吗?

MSBUILD : 错误 MSB1008: teamcity 中只能指定一个项目