13

这是我的配置: 在此处输入图像描述

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

4

3 回答 3

19

Powershell 的 stdin 命令选项对这样的多行命令有些奇怪。

您可以使用以下形式编写脚本:

write-host "test"
write-host "test2"
if("1" -eq "1"){write-host "test3 in if"} else {write-host "test4 in else"}

理想的方法是使用Script : FileTeamCity 中的选项,它将运行您使用-FilePowershell 参数指定的脚本。

如果您不想拥有文件并拥有 VCS,请在当前设置中更改Script Execution ModeExecute .ps1 file with -File argument.

于 2012-02-07T08:36:49.003 回答
3

我在使用 TeamCity 的内联 powershell 脚本时遇到了这个问题(直到当前版本的 7.1.3)。我发现问题出在制表符而不是多行语句上。尝试用空格替换制表符(同时仍然保持多行),脚本应该可以正常运行。

于 2012-12-21T10:17:05.770 回答
1

您可以尝试将打开块的大括号与 If 放在同一行。

IE,

If ('1' -eq '1') {
    ...
}
Else {
    ...
}

这是您在 Powershell 中看到的通常样式,显然,将大括号放在下一行可能会导致问题。

于 2012-06-15T23:20:35.497 回答