Обычно можно использовать $ ErrorActionPreference, чтобы остановить выполнение сценария PS при ошибке, как в примере ниже, в котором используется недопустимая команда subversion. Сценарий завершается после первой команды.
$ErrorActionPreference='Stop'
svn foo
svn foo
При попытке выполнить то же самое с помощью команды maven (mvn.bat) выполняются обе команды.
$ErrorActionPreference='Stop'
mvn foo
mvn foo
Изначально я подозревал, что mvn.bat не устанавливает код ошибки, а PS просто не видит ошибку. Тем не менее, $? установлен правильно, как показано ниже, когда PS выходит после первой ошибки:
mvn foo
if (-not $?) {exit 1}
mvn foo
Итак, вот мой вопрос: учитывая, что svn.exe и mvn.bat устанавливают код ошибки при сбое, почему скрипт PS не останавливается после ошибки mvn. Я считаю, что намного удобнее устанавливать «$ ErrorActionPreference = Stop» глобально, чем делать «if (-not $?) {Exit 1}» после каждой команды, завершающейся при ошибке.