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