about_Switch

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0

トピック

about_Switch

概要

スイッチを使用して複数の If ステートメントを処理する方法について説明します。

詳細説明

スクリプトまたは関数の条件を確認するには、If ステートメントを使用します。If では、変数の値やオブジェクトのプロパティなど、さまざまな種類の条件を確認できます。

複数の条件を確認するには、Switch ステートメントを使用します。Switch ステートメントは一連の If ステートメントと同等ですが、より簡単です。Switch ステートメントには、各条件およびオプションの操作を一覧します。条件が成立した場合、操作が実行されます。

基本的な Switch ステートメントの形式は次のとおりです。

        Switch (<test-value>)
        {
            <condition> {<action>}
            <condition> {<action>}
       }

たとえば、次の Switch ステートメントは、テスト値 3 をそれぞれの条件と比較します。テスト値が条件と一致すると、操作が実行されます。

        PS> switch (3) 
         {
            1 {"It is one."}
            2 {"It is two."}
            3 {"It is three."}
            4 {"It is four."}
         } 
        It is three.

この簡単な例では、値は、値 3 との一致があっても一覧の各条件と比較されます。次の Switch ステートメントには、値 3 の条件が 2 つあります。ここでは、既定ですべての条件がテストされることが示されています。

        PS> switch (3) 
         {
            1 {"It is one."}
            2 {"It is two."}
            3 {"It is three."}
            4 {"It is four."}
            3 {"Three again."}
         } 
        It is three.
        Three again.

一致した後比較を中止するよう Switch に指示するには、Break ステートメントを使用します。Break ステートメントにより、Switch ステートメントは終了します。

        PS> switch (3) 
         {
            1 {"It is one."}
            2 {"It is two."}
            3 {"It is three."; Break}
            4 {"It is four."}
            3 {"Three again."}
         } 
        It is three.

テスト値が配列などのコレクションの場合は、コレクション内の各項目が、出現している順序で評価されます。次の例では、4 を評価してから 2 を評価します。

         PS> switch (4, 2) 
         {
            1 {"It is one." }
            2 {"It is two." }
            3 {"It is three." }
            4 {"It is four." }
            3 {"Three again."}
         } 
        It is four.
        It is two.

次の例に示すように、Break ステートメントは、それぞれの値ではなく、コレクションに適用されます。Switch ステートメントは、値 4 の条件の Break ステートメントによって終了します。

         PS> switch (4, 2) 
         {
            1 {"It is one."; Break}
            2 {"It is two." ; Break }
            3 {"It is three." ; Break }
            4 {"It is four." ; Break }
            3 {"Three again."}
         } 
        It is four.

構文

完全な Switch ステートメントの構文は次のとおりです。

        switch [-regex|-wildcard|-exact][-casesensitive] (<value>)

または

        switch [-regex|-wildcard|-exact][-casesensitive] -file filename

この後に

        { 
            "string"|number|variable|{ expression } { statementlist }
            default { statementlist } 
        }

パラメーターを使用しなかった場合、Switch は大文字と小文字を区別しない値の完全一致を実行します。値がコレクションの場合、各要素は、出現する順序で評価されます。

Switch ステートメントには、少なくとも 1 つの条件ステートメントを含める必要があります。

値がいずれの条件とも一致しない場合、Default 句が実行されます。これは、If ステートメントの Else 句に相当します。Switch ステートメントごとに、1 つの Default 句のみ使用できます。

Switch には次のパラメーターがあります。

Regex

値と条件の正規表現照合を実行します。Regex を使用した場合、Wildcard および Exact は無視されます。また、照合する句が文字列でない場合、このパラメーターは無視されます。

                           Example:
                           PS> switch ("fourteen") 
                               {
                                   1 {"It is one."; Break}
                                   2 {"It is two."; Break}
                                   3 {"It is three."; Break}
                                   4 {"It is four."; Break}
                                   3 {"Three again."; Break}
                                   "fo*" {"That's too many."}
                               } 

                           PS> switch -Regex ("fourteen") 
                               {
                                   1 {"It is one."; Break}
                                   2 {"It is two."; Break}
                                   3 {"It is three."; Break}
                                   4 {"It is four."; Break}
                                   3 {"Three again."; Break}
                                   "fo*" {"That's too many."}
                               }
                        That's too many.

Wildcard

条件がワイルドカード文字列であることを示します。Wildcard を使用した場合、Regex および Exact は無視されます。また、照合する句が文字列でない場合、このパラメーターは無視されます。

Exact

照合する句が文字列である場合、正確に一致する必要があることを示します。Exact を使用した場合、Regex および Wildcard は無視されます。また、照合する句が文字列でない場合、このパラメーターは無視されます。

CaseSensitive

大文字と小文字を区別した照合を実行します。照合する句が文字列でない場合、このパラメーターは無視されます。

ファイル

値のステートメントではなく、ファイルから入力を受け取ります。複数の File パラメーターが含まれる場合、最後の 1 つのみが使用されます。ファイルの各行が読み取られ、Switch ステートメントで評価されます。

Regex、Wildcard、または Exact の複数のインスタンスを使用できます。ただし、最後に使用されたパラメーターのみ有効になります。

値が複数の条件と一致している場合、それぞれの条件の操作が実行されます。この動作を変更するには、Break または Continue キーワードを使用します。

Break キーワードは、処理を停止し、Switch ステートメントを終了します。

Continue キーワードは、現在の値および後続の値の処理を続行します。

条件が式またはスクリプト ブロックの場合、この条件は値との比較の直前に評価されます。値は $_ 自動変数に割り当てられ、式で使用できるようになります。式が true であるか、または値と一致している場合に、一致が成功します。式は、独自のスコープで評価されます。

"Default" キーワードは、その他の条件が値と一致していない場合にのみ評価される条件を指定します。

各条件の操作は、その他の条件の操作に依存しません。操作の右中かっこ (}) は、明示的な区切りを意味します。

関連項目

about_Break

about_Continue

about_If

about_Script_Blocks