PowerShell разделяет ошибки на два типа, и это критически важно понимать для правильной обработки.
Terminating errors (завершающие) — останавливают выполнение текущей команды или скрипта. Примеры: деление на ноль, вызов несуществующего метода, ошибки .NET-исключений. Перехватываются блоком try/catch.
Non-terminating errors (незавершающие) — выводят ошибку, но продолжают выполнение. Примеры: файл не найден в Get-Item, нет доступа к одному из многих файлов. По умолчанию НЕ перехватываются try/catch.
Это главный источник проблем: администратор добавляет try/catch, но ошибки всё равно проскакивают, потому что они non-terminating.
# Эта ошибка НЕ будет перехвачена!
try {
Get-Item 'C:\nonexistent.txt' # Non-terminating error
} catch {
Write-Host 'Ошибка перехвачена' # Никогда не выполнится
}Решение — параметр -ErrorAction Stop, который превращает non-terminating ошибки в terminating:
# Теперь ошибка будет перехвачена
try {
Get-Item 'C:\nonexistent.txt' -ErrorAction Stop
} catch {
Write-Host "Перехвачено: $($_.Exception.Message)"
}
Оставить комментарий