Teamcity似乎腐败的Powershell脚本

时间:2013-05-01 16:42:49

标签: powershell teamcity

我有一个PowerShell脚本,我试图通过teamcity运行。该脚本存储在构建代码的git仓库中。我已将teamcity设置为将脚本作为脚本文件运行

如果我从构建服务器上的powershell命令行运行脚本,它会按预期运行,如果我从teamcity运行相同的脚本,我会收到错误,如

[16:04:25][Step 3/3] Get-Date : Cannot bind parameter 'Date'. Cannot convert value "–f" to type 
[16:04:25][Step 3/3] "System.DateTime". Error: "The string was not recognized as a valid DateTime. 
[16:04:25][Step 3/3] There is an unknown word starting at index 0."
[16:04:25][Step 3/3] At line:1 char:26
[16:04:25][Step 3/3] + Write-Output "$(Get-Date –f $timeStampFormat) - Upgrading Deployment: In 
[16:04:25][Step 3/3] progr ...
[16:04:25][Step 3/3] +                          ~~~~
[16:04:25][Step 3/3]     + CategoryInfo          : InvalidArgument: (:) [Get-Date], ParameterBindin 
[16:04:25][Step 3/3]    gException
[16:04:25][Step 3/3]     + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerSh 
[16:04:25][Step 3/3]    ell.Commands.GetDateCommand
[16:04:25][Step 3/3]  

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:3)

解决方案应该更加简单。 teamcity中有一个名为“脚本执行模式”的选项,一旦脚本开始按预期运行,我就从Put script into PowerShell stdin with "-Command -" arguments更改为Execute .ps1 script with "-File" argument

答案 1 :(得分:0)

我遇到了类似的问题,但脚本编码本身并不是问题,而是脚本的输出。我使用PowerShell读取app.config文件,替换文件中的变量,然后将文件写回原始路径。该脚本正在接收UTF-8编码的app.config,但正在输出USC-2编码的文件。当Msbuild从app.config收到意外字符时抛出错误。

脚本正在使用$updatedConfig > $path的{​​{1}}简写为新输出编写。我必须用完整的命令out-file替换它才能指定输出编码。

注意:除了两个TeamCity构建配置外,我成功使用了上面的速记代码段。我检查并仔细检查了原始配置文件是否来自源代码控制,具有正确的编码,甚至可以将文件转换为带有BOM的UTF-8。除了删除速记语法之外没有任何效果。