ja-JP/about_Try_Catch_Finally.help.txt

TOPIC
    about_Try_Catch_Finally

簡単な説明
    終了エラー(terminating error)を捕捉して処理する try / catch / finally
    を説明します。(PSHelpJaJP 日本語パッチ版)

詳細な説明
    try ブロック内で終了エラーが発生すると、PowerShell は対応する catch
    ブロックにエラーを渡して処理させます。finally ブロックは、エラーの有無に
    かかわらず最後に必ず実行され、後始末に使います。

構文

    try
    {
        <エラーが発生し得るコード>
    }
    catch [<例外の型1>], [<例外の型2>]
    {
        <型1 または型2 のエラーを処理するコード>
    }
    catch
    {
        <上記以外のすべてのエラーを処理するコード>
    }
    finally
    {
        <エラーの有無に関係なく必ず実行するコード>
    }



    try
    {
        $content = Get-Content "C:\no_such_file.txt" -ErrorAction Stop
    }
    catch [System.IO.FileNotFoundException]
    {
        "ファイルが見つかりません: $($_.Exception.Message)"
    }
    catch
    {
        "想定外のエラー: $($_.Exception.Message)"
    }
    finally
    {
        "後始末を実行しました"
    }

エラー情報の参照

    catch ブロック内では、自動変数 $_ (または $PSItem) で現在のエラー
    (ErrorRecord) を参照できます。

        catch
        {
            $_.Exception.Message # エラーメッセージ
            $_.Exception.GetType().FullName # 例外の型名
            $_.ScriptStackTrace # スタックトレース
        }

重要な注意(非終了エラーの扱い)

    try/catch が捕捉するのは「終了エラー」だけです。多くのコマンドレットの
    エラーは既定で「非終了エラー」であり、そのままでは catch されません。
    確実に捕捉するには -ErrorAction Stop を付けて終了エラーに変換します。

        Get-Item "Z:\x" -ErrorAction Stop # これで catch 可能

    複数の catch を書く場合は、より具体的な例外型を先に記述してください
    (先に一致したものが使われます)。

関連項目
    about_Throw
    about_Trap
    about_Automatic_Variables
    about_CommonParameters (-ErrorAction について)