Не удается запустить основной скрипт Powershell в Team City - PullRequest
13 голосов
/ 06 февраля 2012

Вот моя конфигурация: 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 ]

19 голосов
/ 07 февраля 2012

Опция команды stdin в Powershell имеет некоторые странности в таких многострочных командах.

Ваш скрипт будет работать в следующей форме:

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

В идеале можно использовать опцию Script : File в TeamCity, которая будет запускать скрипт, указанный вами с помощью -File параметр Powershell.

Если вы не хотите иметь файл и иметь VCS, в текущей настройке измените Script Execution Mode на Execute .ps1 file with -File argument.

3 голосов
/ 21 декабря 2012

У меня была эта проблема со встроенными сценариями PowerShell с TeamCity (вплоть до текущей версии 7.1.3).Я обнаружил, что проблема заключается в символе табуляции, а не в многострочных операторах.Попробуйте заменить символы табуляции пробелами (оставаясь при этом многострочными), и скрипт будет работать нормально.

1 голос
/ 16 июня 2012

Вы можете попытаться поместить скобку, открывающую блок, в ту же строку, что и If.

т.е.,

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

Это обычный стиль, который вы видите в Powershell, и, очевидно, размещение скобок на следующей строке может вызвать проблемы.

...