这是我的配置:
在构建日志中,我只看到前两行的输出,然后"进程退出,代码为0"作为此构建步骤的最后一个输出。
我尝试在SYSTEM帐户的构建服务器中打开终端(使用PsTools),因为Team City配置为在所述帐户下运行。然后,我创建了一个具有相同内容的Test.ps1文件,并像Team City那样运行命令:
[Step 1/4] Starting: C:\Windows\system32\cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -Command - <C:\TeamCity\buildAgent\temp\buildTmp\powershell5129275380148486045.ps1 && exit /b %ERRORLEVEL%
(当然,除了.ps1文件和cmd.exe初始部分的路径之外)。我看到了两个第一行的输出,然后终端突然消失了!
我在哪里陷入困境?顺便说一句,我是Powershell的新手。
答案 0 :(得分:19)
Powershell的stdin命令选项对于这样的多行命令有一些奇怪之处。
您可以使用以下格式编写脚本:
write-host "test"
write-host "test2"
if("1" -eq "1"){write-host "test3 in if"} else {write-host "test4 in else"}
理想的方法是使用TeamCity中的Script : File
选项,该选项将使用-File
参数向Powershell运行您指定的脚本。
如果您不想拥有文件并拥有VCS,请在当前设置中将Script Execution Mode
更改为Execute .ps1 file with -File argument
。
答案 1 :(得分:3)
我使用TeamCity的内联powershell脚本遇到了这个问题(直到当前版本的7.1.3)。我发现问题是制表符而不是多行语句。尝试用空格替换制表符(同时仍然保持多行),脚本运行正常。
答案 2 :(得分:1)
您可以尝试将支架打开块与If。
在同一条线上即,
If ('1' -eq '1') {
...
}
Else {
...
}
这是你在Powershell中看到的通常样式,显然,将支撑放在下一行可能会导致问题。