я создаю пакетный файл, чтобы выполнить мой psake строит в процессе интеграции с TeamCity и commandlets ТФС Powershell из TFPT и придумали следующее:Запуск PSAKE скрипт из командной строки
@ECHO OFF
SET COMMAND_TO_EXECUTE=
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% "& {
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% Import-Module '..\tools\psake\psake.psm1';
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% try
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% {
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% invoke-psake -framework '4.0' -taskList %1 -properties @{config='%2'}
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% };
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% catch
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% {
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% . ..\tools\psake\teamcity.ps1;
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% if(![string]::IsNullOrEmpty($env:TEAMCITY_VERSION))
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% {TeamCity-ReportBuildStatus -status 'FAILURE' -text $_}
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% else
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% {Write-Host ERROR: $_ -ForegroundColor RED};
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% exit $Error.Count;
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% };
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% finally {remove-module psake};
SET COMMAND_TO_EXECUTE=%COMMAND_TO_EXECUTE% };"
echo Build command is %COMMAND_TO_EXECUTE%
IF %PROCESSOR_ARCHITECTURE% == x86 (
powershell -PSConsoleFile "%TFSPowerToolDir%tfshell.psc1" -Version "2.0" -NoProfile -ExecutionPolicy unrestricted -Command %COMMAND_TO_EXECUTE%
) ELSE C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "%TFSPowerToolDir%tfshell.psc1" -Version "2.0" -NoProfile -ExecutionPolicy unrestricted -Command %COMMAND_TO_EXECUTE%
Я с проблемами, возникающими при сбоях сборки в TeamCity, когда возникают ошибки из-за того, что Powershell никогда не выходит с ненулевым кодом выхода. Итак, что я пытаюсь сделать в приведенном выше скрипте, это поймать любые завершающие ошибки из команды Invoke-Psake, сообщить об ошибке команде teamcity и выйти из процесса с ненулевым кодом, равным количеству ошибок, которые произошли. Насколько я могу судить, сценарий кажется прекрасным. Выполнение результирующей команды на ней, похоже, отлично работает. Однако запустить его как часть пакетного файла выше с помощью команды присвоенной -команд аргумента PowerShell EXECUTABLE он терпит неудачу с ошибкой:
Missing expression after unary operator '-'
Я не могу понять, почему это должно быть особенно после запуска команды по-видимому, работает нормально. Может ли кто-нибудь пролить свет на этот вопрос? Вероятно, это синтаксическая ошибка, но я не могу понять это.