PowerShell
Обработка ошибок
Поиск…
Вступление
Типы ошибок
Ошибка является ошибкой, можно задаться вопросом, как могут быть типы в ней. Ну, с powershell ошибка в целом относится к двум критериям,
- Ошибка завершения
- Ошибка без прерывания
Как сказано в названии, Terminating errors завершает выполнение, а ошибки, не связанные с завершением, позволяют продолжить выполнение следующего оператора.
Это верно, если предположить, что значение $ ErrorActionPreference по умолчанию (Continue). $ ErrorActionPreference - это переменная Prefrence, которая сообщает powershell, что делать в случае ошибки «Non-Terminating».
Ошибка завершения
Завершающая ошибка может быть обработана с типичным уловкой try, как показано ниже
Try
{
Write-Host "Attempting Divide By Zero"
1/0
}
Catch
{
Write-Host "A Terminating Error: Divide by Zero Caught!"
}
Вышеприведенный фрагмент будет выполнен, и ошибка будет обнаружена через блок catch.
Ошибка при закрытии
В противном случае ошибка останова с другой стороны не будет поймана в блоке catch по умолчанию. Причиной этого является ошибка, не связанная с завершением, не считается критической ошибкой.
Try
{
Stop-Process -Id 123456
}
Catch
{
Write-Host "Non-Terminating Error: Invalid Process ID"
}
Если вы выполните вышеприведенную строку, вы не получите вывод из блока catch, так как ошибка не считается критической, и выполнение будет просто продолжено из следующей команды. Однако ошибка будет отображаться в консоли. Чтобы справиться с ошибкой без прерывания, вам просто нужно изменить предпочтение ошибки.
Try
{
Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
"Non-Terminating Error: Invalid Process ID"
}
Теперь, с обновленной опцией «Ошибка», эта ошибка будет считаться завершающей ошибкой и будет поймана в блоке catch.
Вызов завершающих и не завершающих ошибок:
Командлет Write-Error просто записывает ошибку в вызывающую хост-программу. Это не останавливает выполнение. Если в качестве броска вы получите завершающую ошибку и прекратите выполнение
Write-host "Going to try a non terminating Error "
Write-Error "Non terminating"
Write-host "Going to try a terminating Error "
throw "Terminating Error "
Write-host "This Line wont be displayed"