スイッチについて
概要
スイッチを使用して複数の 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 句は文字列ではありません。このパラメーターは無視されます。 |
注意
Regex や Wildcard などの競合する値を指定する場合、指定された最後のパラメーターが優先され、競合するすべてのパラメーターは無視されます。 パラメーターの複数のインスタンスも許可されます。 ただし、最後に使用したパラメーターのみが有効です。
この例では、一致するケースがないため、出力はありません。
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