Как обрабатывать ошибки tf.exe в скрипте PowerShell

У меня есть сценарий PowerShell, который запускает tf.exe команды.

$tfExe = {C:\path\to\tf.exe}
& $tfExe checkout / checkin etc.

Если я попытаюсь запустить команду checkin для файла, который не изменился, я получу ошибку:

Следующие изменения не были зарегистрированы, так как элемент не был изменен.

Отмена редактирования: {C:\path\to\file}

Проблема в том, что я запускаю скрипт в сборке TFS, и сборка завершается с ошибкой:

[ошибка] Нет оставшихся изменений для регистрации.

Но это не настоящая ошибка, если нет изменений, поэтому не регистрируйтесь, это хорошее поведение для меня.

Как обработать ошибки tf.exe?

Я пытался с try catch, но не работает, хотя есть ошибка, выполняется блок try, а не catch.

Я также пытался с помощью переменной получить вывод $test = & $tfExe checkin ... и все равно получить ошибку (и переменная пуста).


person Shayki Abramczyk    schedule 23.12.2018    source источник
comment
$LASTEXITCODE содержит код выхода последнего исполняемого файла, который вы запускали.   -  person Bill_Stewart    schedule 23.12.2018
comment
Но это не помогает мне, потому что я могу исследовать $LASTEXITCODE только после того, как я уже получил ошибку, а затем сборка уже не удалась.   -  person Shayki Abramczyk    schedule 23.12.2018


Ответы (1)


PowerShell не понимает ошибки собственных исполняемых файлов. Вы должны проанализировать вывод, чтобы принять решение. Вы можете перенаправить поток ошибок в выходной поток.

$Output = tf.exe … 2>&1

$Output.exception.message -match 'There are no remaining'
person Prasoon Karunan V    schedule 23.12.2018
comment
Я думаю, это поможет мне! Спасибо! - person Shayki Abramczyk; 23.12.2018