В сценарии, когда команда-let или другой исполняемый оператор выдает ошибку, существует ли механизм типа try/catch для восстановления после этих ошибок? Я не встречал ни одного в документации.
Есть ли в Windows Powershell механизм Try/Catch или другой механизм обработки ошибок?
Ответы (3)
Вы используете блок Trap [exception-type] {}
перед кодом, для которого хотите обрабатывать исключения.
Я писал об этом в своей колонке TechNet Magazine (technetmagazine.com, если вам интересно).
Во-первых, PowerShell v2 будет иметь стандартную команду Try...Catch, и это здорово.
Существующая оболочка (v1) поддерживает конструкции trap {}. Они должны быть определены до возникновения исключения. Кроме того, большинству командлетов требуется параметр -EA «STOP», чтобы они генерировали перехватываемое исключение. Ловушки могут быть определены в любой области, и они будут "пузыриться" до тех пор, пока не попадут в глобальную область (оболочку).
В конце ловушки выполните Continue, чтобы вернуться к следующей строке кода в той же области, что и ловушка, или выполните Break, чтобы выйти из текущей области и выбросить исключение.
Вот кто-то (Адам Вейгерт), который реализовал try/catch/finally с помощью powershell. Я использую это вместо встроенной ловушки. Кажется более естественным.
http://weblogs.asp.net/adweigert/archive/2007/10/10/powershell-try-catch-finally-comes-to-life.aspx