about_Throw

簡単な説明

終了エラーを生成する Throw キーワードについて説明します。

長い説明

Throw キーワードを使うと、終了エラーが発生します。 Throw キーワードを使用すると、コマンド、関数、またはスクリプトの処理を停止できます。

たとえば、If ステートメントのスクリプトブロックで Throw キーワードを使用して、条件に応答したり、try-catch ステートメントの Catch ブロックで Throw キーワードを使用したりすることができます。 また、パラメーター宣言で Throw キーワードを使用して、関数パラメーターを必須にすることもできます。

Throw キーワードを使用すると、ユーザーメッセージ文字列や、エラーの原因となったオブジェクトなど、任意のオブジェクトをスローできます。

構文

Throw キーワードの構文は次のとおりです。

throw [<expression>]

Throw 構文の式は省略可能です。 Throw ステートメントが Catch ブロックに出現せず、式も含まれていない場合、例外が生成されます。

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 キーワードを使用して 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 を参照してください。

関連項目