Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't get basic Powershell script running inside Team City

Here's my configuration: enter image description here

On the build log, I only see the output of the first two lines, and then "Process exited with code 0" as the last output of this build step.

I tried opening a terminal in the build server in the SYSTEM account (using PsTools), since Team City is configured to run under said account. Then, I created a Test.ps1 file with the same content and ran a command just like Team City's:

[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%

(except for the path to the .ps1 file and the cmd.exe initial part, of course). I saw the output of the two first lines, and then the terminal disappeared all of a sudden!

Where did I mess up? I'm new to Powershell, by the way.

like image 360
dario_ramos Avatar asked Feb 06 '12 19:02

dario_ramos


3 Answers

The stdin command option of Powershell has some weirdness around multiline commands like that.

You script in the following form would work:

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

The ideal way would be to use the Script : File option in TeamCity which will will run the script you specify using the -File parameter to Powershell.

If you don't want to have a file and having VCS, in the current setup, change Script Execution Mode to Execute .ps1 file with -File argument.

like image 141
manojlds Avatar answered Nov 19 '22 15:11

manojlds


I've had this problem with inline powershell scripts with TeamCity (right up until the current version of 7.1.3). I've found the problem to be the tab character rather than multi-line statements. Try replacing the tab characters with spaces (while still remaining multi-line) and the script should run fine.

like image 20
Mark Glasgow Avatar answered Nov 19 '22 15:11

Mark Glasgow


You could try putting the brace opening the block on the same line as the If.

I.e.,

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

That's the usual styling you see with Powershell, and obviously, putting the braces on the next line can cause problems.

like image 1
jpmc26 Avatar answered Nov 19 '22 15:11

jpmc26