Есть ли в Windows Powershell механизм Try/Catch или другой механизм обработки ошибок?

В сценарии, когда команда-let или другой исполняемый оператор выдает ошибку, существует ли механизм типа try/catch для восстановления после этих ошибок? Я не встречал ни одного в документации.


person casademora    schedule 14.10.2008    source источник
comment
Примечание для будущих читателей: PowerShell v2 уже выпущен и поддерживает Try/Catch/Finally.   -  person JasonMArcher    schedule 07.01.2010


Ответы (3)


Вы используете блок Trap [exception-type] {} перед кодом, для которого хотите обрабатывать исключения.

person Michael Burr    schedule 14.10.2008
comment
+0 Настоящий ответ теперь — try/catch в PowerShell v2 и более поздних версиях, как указано в комментарии к вопросу. Вместо этого я +1d t@Mark Ingram, так как считаю это дублированием, которое мало что добавляет. (Да, я знаю, что это было давно, но я пропустил комментарий к вопросу в первый раз, и за него проголосовали больше всего) - person Ruben Bartelink; 02.07.2012

Я писал об этом в своей колонке TechNet Magazine (technetmagazine.com, если вам интересно).

Во-первых, PowerShell v2 будет иметь стандартную команду Try...Catch, и это здорово.

Существующая оболочка (v1) поддерживает конструкции trap {}. Они должны быть определены до возникновения исключения. Кроме того, большинству командлетов требуется параметр -EA «STOP», чтобы они генерировали перехватываемое исключение. Ловушки могут быть определены в любой области, и они будут "пузыриться" до тех пор, пока не попадут в глобальную область (оболочку).

В конце ловушки выполните Continue, чтобы вернуться к следующей строке кода в той же области, что и ловушка, или выполните Break, чтобы выйти из текущей области и выбросить исключение.

person Don Jones    schedule 24.11.2008

Вот кто-то (Адам Вейгерт), который реализовал try/catch/finally с помощью powershell. Я использую это вместо встроенной ловушки. Кажется более естественным.

http://weblogs.asp.net/adweigert/archive/2007/10/10/powershell-try-catch-finally-comes-to-life.aspx

person Mike Shepard    schedule 11.11.2008