2010-10-27 5 views
0

я создаю пакетный файл, чтобы выполнить мой 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 '-'

Я не могу понять, почему это должно быть особенно после запуска команды по-видимому, работает нормально. Может ли кто-нибудь пролить свет на этот вопрос? Вероятно, это синтаксическая ошибка, но я не могу понять это.

ответ

0

Хммм, подумайте, что вам нужно сделать магию с помощью эвакуаторов. Любой вызов PowerShell я из CMD Я стараюсь держать образование следующим образом: -

"powershell.exe -command '& {C: \ Temp \ Example.ps1 -param1 привет.}'"

Ваше усложнение происходит из многострочной cmd-переменной, которую вы пытаетесь создать, каждая строка с расширением переменной удалит любые управляющие последовательности, которые вы применяете. я бездельничал немного для вас, но потом подумал .... почему бы вам не просто создать .PS1 скрипт с блоком сценария в, сохраняет любой неприятный побег и т.д.

Так Invoke-Build.ps1 становится - Param ($ TaskList, $ Config) Import-Module .. \ инструменты \ psake \ psake.psm1 попробовать { Invoke-psake -framework 4,0 -taskList $ TaskList -properties @ {конфиг = $ Config}} поймать { . .. \ инструменты \ psake \ teamcity.ps1; если ([строка] :: IsNullOrEmpty ($ ENV: TEAMCITY_VERSION)) { Teamcity-ReportBuildStatus -Status FAILURE -text $ _ } еще { Написать-Host ERROR: $ _ -ForegroundColor RED } выход $ Error.count } наконец {Удаляем-модуль psake}

Тогда вы можете просто точка источника сценарий из ЦМД ......

@echo OFF

SET COMMAND_TO_EXECUTE = Invoke-Build.ps1

эхо команды сборки "% COMMAND_TO_EXECUTE%"

ЕСЛИ% PROCESSOR_ARCHITECTURE% == x 86 ( -PSConsoleFile PowerShell "% TFSPowerToolDir% tfshell.psc1" -Version «2.0 "-NoProfile -ExecutionPolicy unrestricted -Command" & {. % COMMAND_TO_EXECUTE% -TaskList -Config} " ) ELSE ( C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ powershell.exe -PSConsoleFile"% TFSPowerToolDir% tfshell.psc1 "-Version" 2.0 "-NoProfile -ExecutionPolicy unrestricted -Command" & {. % COMMAND_TO_EXECUTE% -TaskList -Config} "

 Смежные вопросы

  • Нет связанных вопросов^_^