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
.