Не удается получить базовую версию 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, и, очевидно, ставит фигурные скобки на следующей строке, может вызвать проблемы.