2016-08-26 8 views
1

в PowerShell, при определенных условиях, я могу это сделать:поймать PowerShell [System.Management.Automation.MethodException] ошибка

throw [System.Management.Automation.MethodException] 

позже я поймать так:

catch [System.Management.Automation.MethodException] 
{ 

catch 
{ 

Мой код падает во второй (общий) улов. , когда я смотрю на $ _. Исключение во втором улове: «System.Management.Automation.MethodException» - так почему Powershell не поймает его в первом улове? Как я могу это исправить?

Спасибо, Питер

+1

'бросить [System.Management.Automation. MethodException] '->' throw [System.Management.Automation.MethodException] :: new() ' – PetSerAl

ответ

1

PetSerAl имеет это право в комментарии; вам необходимо создать экземпляр класса MethodException.

Его предложение красиво и лаконично:

throw [System.Management.Automation.MethodException]::new() 

Но он работает только на PowerShell 5+. В более ранних версиях:

$ex = New-Object -TypeName System.Management.Automation.MethodException 
throw $ex 

Или простой способ использовать это в любой версии, а в том числе сообщения, чтобы бросить [String] как исключение:

throw [System.Management.Automation.MethodException]"You messed up."