2014-01-06 2 views
1

У меня есть задача работает ртутный команду, которая терпит неудачу, потому что ртутный не возвращает 0, но 1.psake управления код ошибки

Когда ртутные возвращает 1 не означает, что это ошибка, но нет ничего, чтобы сделать. Согласно документации:

Returns 0 if push was successful, 1 if nothing to push. 

Как я могу справиться возвращение в моей задаче так, когда команда возвращает 0 рт.ст. или 1 не сломается.

Вот неисправная функция

Function Invoke-HgBookmark([string]$bookmarkname) 
{ 
    $repo = GetCredentials 
    & $hg.file bookmark -f $bookmarkname 
    Invoke-Expression "$($hg.file) push -B $bookmarkname $repo" 
    if ($LASTEXITCODE -eq 0 -Or $LASTEXITCODE -eq 1) 
    { 
     return 0 
    } 
    else 
    { 
     return -1 
    } 
} 

Psake зовут свою функцию с этим кодом:

try { 
    $global:lastexitcode = 0     
    & $cmd 
    if ($lastexitcode -ne 0) { 
     throw ("Exec: " + $errorMessage) 
    } 
    break 
} 
+0

Похоже, ваша функция пытается обработать код выхода из 1. Является ли функция возвращением '-1' или сбой каким-то другим способом? Если он возвращает '-1' - вставьте« Write-Host »$ LastExitCode« », чтобы узнать, какой код выхода вы получаете. Логика выражения 'if' выглядит хорошо. Кстати, что с Invoke-Expression? Я не понимаю, почему вы не можете вызывать $ hg.file, как в строке выше iex. –

+0

На самом деле, я изучаю powershell ... Мне не нужно iex. Вернемся к моей проблеме. Я добавил код, который использует psake, и я не могу перезаписать $ lastexitcode в случае, если hg возвращает 1 – Swell

+0

. А в этом случае попробуйте заменить 'Return x' на' $ LastExitCode = x'. –

ответ

3

В функции установите $global:LastExitCode до требуемого значения перед выходом. Для изменения глобальной переменной необходимо использовать префикс global:. В противном случае PowerShell выполняет операцию «копирование на запись» и изменяет переменную с тем же именем, которое является локальным для этой функции.

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