无法在Team City中运行基本的Powershell脚本

时间:2012-02-06 19:01:31

标签: powershell teamcity powershell-v1.0

这是我的配置: enter image description here

在构建日志中,我只看到前两行的输出,然后"进程退出,代码为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的新手。

3 个答案:

答案 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中看到的通常样式,显然,将支撑放在下一行可能会导致问题。