Je crée un fichier batch pour exécuter mon psake construit tout en intégrant avec TeamCity et les commandlets TFS Powershell de TFPT et sont venus avec les éléments suivants:L'exécution du script PSAKE de la ligne de commande
@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%
J'étais avoir des problèmes avec les builds qui n'échouent pas dans TeamCity quand des erreurs se produisent parce que Powershell ne quitte jamais avec un code de sortie différent de zéro. Donc ce que je tente de faire dans le script ci-dessus est d'attraper les erreurs de terminaison de la commande Invoke-Psake, de signaler l'erreur à teamcity et de quitter le processus avec un code non nul égal au nombre d'erreurs survenues. Autant que je peux dire le script semble bien. L'exécution de la commande résultante semble fonctionner correctement. Cependant, il en cours d'exécution dans le cadre du fichier batch ci-dessus avec la commande affectée à l'argument -Command de l'exécutable Powershell il échoue avec l'erreur:
Missing expression after unary operator '-'
Je ne vois pas pourquoi cela devrait être d'autant plus que d'exécuter la commande sur son propre semble fonctionner correctement. Quelqu'un peut-il faire la lumière sur le sujet? C'est probablement une erreur de syntaxe quelque part mais je n'arrive pas à comprendre.