簡単な説明
終了エラーを生成する Throw キーワードについて説明します。
長い説明
Throw キーワードにより、終了エラーが発生します。 Throw キーワードを使用して、コマンド、関数、またはスクリプトの処理を停止できます。
たとえば、If ステートメントのスクリプト ブロックで Throw キーワードを使用して条件に応答したり、Try-Catch-Finally ステートメントの Catch ブロックでキーワードを使用したりできます。 また、パラメーター宣言で Throw キーワードを使用して、関数パラメーターを必須にすることもできます。
Throw キーワードは、ユーザー メッセージ文字列やエラーの原因となったオブジェクトなど、任意のオブジェクトをスローできます。
構文
Throw キーワードの構文は次のとおりです。
throw [<expression>]
Throw 構文の式はオプションです。 Throw ステートメントが Catch ブロックに表示されず、式が含まれていない場合は、ScriptHalted エラーが生成されます。
C:\PS> throw
Exception: ScriptHalted
Throw キーワードを式なしで Catch ブロックで使用すると、現在の RuntimeException が再度スローされます。 詳細については、「about_Try_Catch_Finally」を参照してください。
文字列を投げる
Throw ステートメントのオプション式は、次の例に示すように文字列にすることができます。
C:\PS> throw "This is an error."
Exception: This is an error.
他のオブジェクトを投げる
式には、次の例に示すように、PowerShell プロセスを表すオブジェクトを投げるオブジェクトを指定することもできます。
C:\PS> throw (get-process Pwsh)
Exception: System.Diagnostics.Process (pwsh) System.Diagnostics.Process (pwsh) System.Diagnostics.Process (pwsh)
$error 自動変数の ErrorRecord オブジェクトの TargetObject プロパティを使用して、エラーを調べることができます。
C:\PS> $error[0].targetobject
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
125 174.44 229.57 23.61 1548 2 pwsh
63 44.07 81.95 1.75 1732 2 pwsh
63 43.32 77.65 1.48 9092 2 pwsh
ErrorRecord オブジェクトまたは .NET 例外をスローすることもできます。 次の例では、Throw キーワードを使用して System.FormatException オブジェクトをスローします。
C:\PS> $formatError = new-object system.formatexception
C:\PS> throw $formatError
OperationStopped: One of the identified items was in an invalid format.
結果のエラー
Throw キーワードは、ErrorRecord オブジェクトを生成できます。 ErrorRecord オブジェクトの Exception プロパティには、RuntimeException オブジェクトが含まれています。 ErrorRecord オブジェクトと RuntimeException オブジェクトの残りの部分は、Throw キーワードがスローするオブジェクトによって異なります。
RunTimeException オブジェクトは ErrorRecord オブジェクトにラップされ、ErrorRecord オブジェクトは $Error 自動変数に自動的に保存されます。
Throw を使用して必須パラメーターを作成する
PowerShell の過去のバージョンとは異なり、パラメーターの検証に Throw キーワードを使用しないでください。 正しい方法については、about_Functions_Advanced_Parameters を参照してください。