トピック about_Throw 簡易説明 終了エラーを生成する Throw キーワードについて説明します。 詳細説明 Throw キーワードは、終了エラーを引き起こします。Throw キーワードを使用して、コマンド、関数、またはス クリプトの処理を停止できます。 たとえば、Throw キーワードは、If ステートメントのスクリプト ブロックでなんらかの条件に一致する 場合の反応として使用したり、Try-Catch-Finally ステートメントの Catch ブロックで使用したりでき ます。関数のパラメーターを必須として定義するために、パラメーター宣言で Throw キーワードを使用 することもできます。 Throw キーワードでは、ユーザー メッセージ文字列、エラーの原因となったオブジェクトなど、あらゆる オブジェクトをスローできます。 構文 Throw キーワードの構文は次のとおりです。 throw [<expression>] Throw の構文の式 (expression) の部分は省略可能です。Throw ステートメントが Catch ブロック内に ない場合は、式が指定されていないと、ScriptHalted エラーが生成されます。 C:\PS> throw ScriptHalted 行:1 文字:6 + throw <<<< + CategoryInfo : 操作停止: (:) []、RuntimeException + FullyQualifiedErrorId : ScriptHalted 式を指定せずに Throw キーワードを Catch ブロックで使用した場合、現在の RuntimeException が再度スローされます。詳細については、「about_Try_Catch_Finally」を参照してください。 文字列のスロー 次の例に示すように、Throw ステートメントの省略可能な expression には文字列を指定できます。 C:\PS> throw "This is an error." This is an error. 行:1 文字:6 + throw <<<< "This is an error." + CategoryInfo : 操作停止: (This is an error.:String) []、RuntimeException + FullyQualifiedErrorId : This is an error. 他のオブジェクトのスロー expression には、PowerShell プロセスを表すオブジェクトをスローするオブジェクトを指定すること もできます。次に例を示します。 C:\PS> throw (get-process powershell) System.Diagnostics.Process (powershell) 行: 1 文字: 6 + throw <<<< (get-process powershell) + CategoryInfo : 操作停止: (System.Diagnostics.Process (powershell):Process) []、 RuntimeException + FullyQualifiedErrorId : System.Diagnostics.Process (powershell) $error 自動変数に格納されている ErrorRecord オブジェクトの TargetObject プロパティを使用する と、エラーを調査することができます。 C:\PS> $error[0].targetobject Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 319 26 61016 70864 568 3.28 5548 powershell ErrorRecord オブジェクトや Microsoft .NET Framework の例外をスローすることもできます。次の 例では、Throw キーワードを使用して、System.FormatException オブジェクトをスローしています。 C:\PS> $formatError = new-object system.formatexception C:\PS> throw $formatError 識別された項目のうち 1 つが無効な形式です。 行:1 文字:6 + throw <<<< $formatError + CategoryInfo : 操作停止: (:) []、FormatException + FullyQualifiedErrorId : 識別された項目のうち 1 つが無効な形式です。 生成されるエラー Throw キーワードは、ErrorRecord オブジェクトを生成できます。ErrorRecord オブジェクトの Exception プロパティには、RuntimeException オブジェクトが格納されます。RuntimeException オブ ジェクトと ErrorRecord オブジェクトの残りの要素は、Throw キーワードがスローするオブジェクト によって異なります。 RunTimeException オブジェクトは ErrorRecord オブジェクトにラップされ、ErrorRecord オブジェク トは $Error 自動変数に自動的に保存されます。 Throw を使用した必須パラメーターの作成 Throw キーワードを使用して、関数のパラメーターを必須にすることができます。 これは、Parameter キーワードの Mandatory パラメーターを使用する方法に代わる方法です。Mandatory パラメーターを使用した場合は、パラメーターの値を指定するように求めるプロンプトが表示されます。Throw キーワードを使用した場合は、コマンドが処理を停止し、エラー レコードを表示します。 たとえば、パラメーターのサブ式に Throw キーワードを指定すると、Path パラメーターがその関数の必須のパ ラメーターとして機能します。 この場合、Throw キーワードは単にメッセージ文字列をスローしているだけのように見えますが、Path パラメ ーターが指定されなかった場合に終了エラーを引き起こしているのは、Throw キーワードの存在です。Throw に 続く式は省略可能です。 function Get-XMLFiles { param ($path = $(throw "The Path parameter is required.")) dir -path $path\* -include *.xml -recurse | sort lastwritetime | ft lastwritetime, attributes, name -auto } 関連項目 about_Break about_Continue about_Scope about_Trap about_Try_Catch_Finally