Поиск…


Вступление

В этом разделе обсуждаются типы ошибок и обработка ошибок в 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" 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow