about_Throw
トピック
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