次の方法で共有


スイッチについて

概要

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

詳細説明

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

複数の条件をチェックするには、 ステートメントをSwitch使用します。 ステートメントは Switch 一連の If ステートメントと同じですが、より簡単です。 ステートメントには Switch 、各条件とオプションのアクションが一覧表示されます。 条件が取得されると、アクションが実行されます。

ステートメントでは Switch 、自動変数も使用されます $switch 。 詳細については、「about_Automatic_Variables」を参照してください。

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

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

たとえば、次 Switch のステートメントは、テスト値 3 を各条件と比較します。 テスト値が条件と一致すると、アクションが実行されます。

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 つの条件があります。 既定では、すべての条件がテストされていることを示します。

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 終了します。

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 が評価されます。

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 終了します。

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>)
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

または

switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

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

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

句は Default 、値がいずれの条件にも一致しない場合にトリガーされます。 これは、 ステートメントの Else 句と If 同じです。 各Switchステートメントで許可される句は 1 Default つだけです。

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

パラメーター 説明
ワイルドカード 条件がワイルドカード文字列であることを示します。
match 句が文字列でない場合、 パラメーターは です。
無視。
[Exact] match 句が文字列の場合は、
は完全に一致します。 match 句が文字列でない場合、このパラメーター
は無視されます。
[CaseSensitive] 大文字と小文字を区別する一致を実行します。 match 句がではない場合
文字列の場合、このパラメーターは無視されます。
[最近使ったファイル] 値ステートメントではなくファイルから入力を受け取ります。 状況
複数 の File パラメーターが含まれています。最後のパラメーターのみが含まれます。
あります。 ファイルの各行は、 によって読み取られ、評価されます。
Switch ステートメント。
Regex 値の正規表現の照合を実行します。
condition。 取得するオブジェクトで
match 句は文字列ではありません。このパラメーターは無視されます。

注意

RegexWildcard などの競合する値を指定する場合、指定された最後のパラメーターが優先され、競合するすべてのパラメーターは無視されます。 パラメーターの複数のインスタンスも許可されます。 ただし、最後に使用したパラメーターのみが有効です。

この例では、一致するケースがないため、出力はありません。

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

句を Default 追加することで、他の条件が成功しなかった場合にアクションを実行できます。

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
    Default {
        "No matches"
    }
}
No matches

"14" という単語を大文字と小文字に一致させるには、 または -Regex パラメーターを-Wildcard使用する必要があります。

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

次の例では、 パラメーターを -Regex 使用します。

$target = 'user@contoso.com'
switch -Regex ($target)
{
    'ftp\://.*' { "$_ is an ftp address"; Break }
    '\w+@\w+\.com|edu|org' { "$_ is an email address"; Break }
    'http[s]?\://.*' { "$_ is a web address"; Break }
}
user@contoso.com is an email address

ステートメントの Switch 条件は次のいずれかです。

  • 値が入力値と比較される式
  • 条件が満たされた場合に を返す $true スクリプト ブロック。 スクリプト ブロックは、自動変数で比較する現在のオブジェクトを $_ 受け取り、独自のスコープで評価されます。

各条件のアクションは、他の条件のアクションとは無関係です。

次の例では、スクリプト ブロックをステートメント条件として Switch 使用する方法を示します。

switch ("Test")
{
    {$_ -is [String]} {
        "Found a string"
    }
    "Test" {
        "This executes as well"
    }
}
Found a string
This executes as well

値が複数の条件と一致する場合は、各条件のアクションが実行されます。 この動作を変更するには、 または Continue キーワードを使用しますBreak

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

キーワード (keyword)はContinue現在の値の処理を停止しますが、後続の値の処理を続行します。

次の例では、数値の配列を処理し、奇数または偶数の場合に表示します。 負の数は、キーワード (keyword)ではContinueスキップされます。 数値以外の値が見つかった場合、キーワード (keyword)で実行がBreak終了します。

switch (1,4,-1,3,"Hello",2,1)
{
    {$_ -lt 0} { Continue }
    {$_ -isnot [Int32]} { Break }
    {$_ % 2} {
        "$_ is Odd"
    }
    {-not ($_ % 2)} {
        "$_ is Even"
    }
}
1 is Odd
4 is Even
3 is Odd

関連項目

about_Break

about_Continue

about_If

about_Script_Blocks