web-dev-qa-db-ja.com

Powershellのcatchブロックから例外を再スローするにはどうすればよいですか?

.Netと同じ方法で例外処理にアプローチする必要がありますか?

次に、Powershellのcatchブロックから例外を再スローするにはどうすればよいですか?

「throw」はenounghですか、「throw $ _」の方が良いでしょうか?

48
pencilCake

PowerShellのthrowキーワードの動作は.net実装とは異なります。netではSystem.Exceptions自体またはその後継のみをスローできますが、PowerShellでは何でもスローでき、自動的にSystem.Management.Automation.RuntimeExceptionにラップされます。スニペット here を参照してください。

元の例外をre-throwしたい場合は、throw(最も一般的)、throw $_、またはthrow $_.Exceptionを使用できます。

ps:catch変数の内部$_は、それ自体は例外ではなく、例外を含むSystem.Management.Automation.ErrorRecord

88
Akim