Не удается получить базовую версию Powershell script, запущенную внутри Team City

Здесь моя конфигурация: 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.

Ответ 1

Параметр команды stdin для Powershell имеет некоторую странность в отношении таких многострочных команд.

Вы можете использовать script в следующем виде:

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

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

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

Ответ 2

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

Ответ 3

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

т.е.

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

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