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

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

Ответы [ 3 ]

8 голосов
/ 14 октября 2008

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

7 голосов
/ 25 ноября 2008

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

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

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

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

2 голосов
/ 11 ноября 2008

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

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

...