Powershell — Try Catch Finally

PowerShellВсем привет. Недавно мы публиковали пару статей о том, как решить ошибку Access is Denied, и как игнорировать ошибки. Но можно пойти другим путем. В Powershell как и во многих языках программирования есть конструкция try catch. В этой статье мы поговорим про эту конструкцию и разберем ее работу.

Powershell — Try Catch

Конструкция try catch имеет 2 блока выполнения скрипта. Она очень похожа на конструкцию if () {} else {}, но без проверки условия. В первом блоке try, пишется код, который необходимо выполнить, а во втором блоке код, который будет выполнен в результате неудачного выполнения первого блока. Рассмотрим пример. Попробуем выполнить несуществующий командлет с блоком try catch:

Логично, что при попытке выполнить несуществующую команда powershell вернет ошибку, но в нашей ситуации возвращается наша кастомная ошибка.

Еще пример, в котором используется 2 блока catch:

Разбираемся. В первом блоке catch отлавливаются исключения относящиеся к System.Net.WebException и System.IO.IOException. Во втором блоке catch будут пойманы все остальные ошибки в результате которых на экране появился сообщение из второго блока.

Помимо кастомных ошибок, можно получать и системные ошибки текстом. Для этого преобразуем всю конструкцию таким образом:

Очень удобный вывод системных ошибок без красного цвета. Помимо получения системного исключения в виде текста, так же можно получить доступ к следующим типам исключений: ScriptStackTrace , Exception и ErrorDetails. Давайте попробуем все:

В нашем случае детали ошибки отсутствуют.

Во всей конструкции существует блок Finally. Он не блокируется ошибками блоков try и catch, и выполняется даже тогда, когда вы нажимаете Ctrl + C.

Итог

Конструкция try catch позволит вам отслеживать ошибки выполнения кода, к тому же если есть код, который должен выполниться не смотря ни на что должен быть помещен к блок Finally. Надеюсь статья была полезна и поучительна для вас! Спасибо за внимание, не забывайте подписываться на нашу группу в ВК, канал на ютубе и залетайте в наш телеграм канал! Если у вас остались вопросы, пишите их в комментариях!

Лицензионное соглашение

Авторские права публикуемых материалов полностью или частично принадлежат авторам сайта Pechenek.NET в соответствии со статьями 1252 и 1301 ГК РФ. Любое распространение должно быть согласовано с автором материала или с указанием ссылки на первоисточник.