我有一个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]
为什么会发生这种情况?
答案 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。除了删除速记语法之外没有任何效果。