
記事記号:[me1586] 初版:2011/May/10

トピック
about_Throw
簡易説明
終了エラーを生成する Throw キーワードについて説明します。
詳細説明
Throw キーワードは、終了エラーを引き起こします。Throw キーワードを使用して、
コマンド、関数、またはスクリプトの処理を停止できます。
たとえば、Throw キーワードは、If ステートメントのスクリプト ブロックでなんら
かの条件に一致する場合の反応として使用したり、Try-Catch-Finally ステートメン
トの Catch ブロックで使用したりできます。関数のパラメーターを必須として定義す
るために、パラメーター宣言で Throw キーワードを使用することもできます。
Throw キーワードでは、ユーザー メッセージ文字列、エラーの原因となったオブジェ
クトなど、あらゆるオブジェクトをスローできます。
構文
Throw キーワードの構文は次のとおりです。
throw [<expression>]
Throw の構文の式 (expression) の部分は省略可能です。Throw ステートメントが C
atch ブロック内にない場合は、式が指定されていないと、ScriptHalted エラーが生
成されます。
C:\PS> throw
ScriptHalted
行:1 文字:6
+ throw <<<<
+ CategoryInfo : 操作停止: (:) []、RuntimeException
+ FullyQualifiedErrorId : ScriptHalted
式を指定せずに Throw キーワードを Catch ブロックで使用した場合、現在の Runti
meException が再度スローされます。詳細については、「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) []、R
untimeException
+ 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 (pow
ershell):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 オブジェクトにラップされ、ErrorR
ecord オブジェクトは $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

基本ソフト: Windows 7
キーワード: Windows PowerShell、ヘルプ、HelpFile、about_Throw