PowerShell:
Обробка помилок

Як це зробити:

# Базовий Try-Catch для обробки винятків
try {
    # Код, який може спричинити помилку
    $result = 1 / 0
} catch {
    # Що робити, якщо сталася помилка
    Write-Host "Ой, сталася помилка: $_"
}

# Виведення згенерованого повідомлення про помилку
try {
    Get-Item "nonexistentfile.txt" -ErrorAction Stop
} catch {
    Write-Host "Файл не можна знайти."
}

# Використання змінної $Error для перевірки останньої помилки

Поглиблено

PowerShell зробив довгий шлях з часу свого початку як Monad. Обробка помилок стала більш надійною з часом, пропонуючи функції, подібні до інших мов програмування. Синтаксис try-catch-finally - це один з таких прийомів, запозичених з мов, як C#. До його появи скрипт-розробники значною мірою покладались на перевірку умов і використання автоматичної змінної $Error.

У PowerShell також є два основні типи помилок: термінуючі та нетермінуючі. Термінуючі помилки зупинять скрипт, якщо їх не перехоплено у блоку try-catch, тоді як нетермінуючі не зупинять, якщо ви не вкажете -ErrorAction Stop. Це розрізнення критичне, оскільки воно дозволяє точно контролювати обробку помилок, вирішуючи, чи помилка дійсно вимагає зупинки всього скрипта або може бути просто зареєстрована та ігнорована.

Обробка помилок у PowerShell також дозволяє використовувати блок finally, який виконується завжди - незалежно від того, чи сталася помилка чи ні. Він чудово підходить для завдань з очистки.

Коли ви глибоко занурені у писання скриптів, ви також можете обробляти конкретні типи винятків, що надає вам ще більший контроль.

Крім того, є стара добра параметри -ErrorVariable для захоплення помилок без викидання винятку. А змінна $? повідомляє вам, чи була остання операція успішною. Вони корисні інструменти, хоча трохи менш чистіші, ніж надійний try-catch.

Дивіться також