Вы делаете это неправильно.
У вас уже есть хорошее, большое сообщение об ошибке. С какой стати вы хотите написать код, который проверяет $?
явно после каждой отдельной команды ? Это чрезвычайно громоздко и подвержено ошибкам. Правильное решение: прекратить проверку $?
.
Вместо этого используйте встроенный механизм PowerShell, чтобы взорвать вас. Вы включаете его, устанавливая предпочтение ошибки на самый высокий уровень:
$ErrorActionPreference = 'Stop'
Я ставлю это наверху каждого скрипта, который я когда-либо писал, и теперь мне не нужно проверять $?
. Это делает мой код намного проще и надежнее.
Если вы сталкиваетесь с ситуациями, когда вам действительно необходимо отключить это поведение, вы можете либо catch
сообщить об ошибке, либо передать настройку определенной функции, используя обычную -ErrorAction
. В вашем случае вы, вероятно, хотите, чтобы ваш процесс остановился на первой ошибке, перехватил ошибку и затем записал ее.
Обратите внимание, что это не относится к случаю сбоя внешних исполняемых файлов (код выхода ненулевой, условно), поэтому вам все равно нужно проверить $LASTEXITCODE
, если вы вызываете любой из них. Несмотря на это ограничение, настройка по-прежнему экономит много кода и усилий.
дополнительная надежность
Возможно, вы захотите использовать строгий режим :
Set-StrictMode -Version Latest
Это предотвращает тихую работу PowerShell при использовании несуществующей переменной и в других странных ситуациях. (См. Параметр -Version
для подробной информации о том, что он ограничивает.)
Сочетание этих двух настроек делает PowerShell гораздо более отказоустойчивым языком, что значительно упрощает программирование на нем.