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




目次