Windows PowerShell スクリプトの Switch コンストラクトを確認し、使用する

完了

Switch コンストラクトは、複数の ElseIf セクションを持つ If コンストラクトに似ています。 Switch コンストラクトは、複数の値に対して 1 つの変数または項目を評価し、値ごとに 1 つのスクリプト ブロックを持ちます。 各値のスクリプト ブロックは、その値が変数と一致する場合に実行されます。 一致がない場合にのみ実行される Default セクションもあります。

Switch コンストラクトでは、次の構文が使用されます。

Switch ($choice) {
   1 { Write-Host "You selected menu item 1" }
   2 { Write-Host "You selected menu item 2" }
   3 { Write-Host "You selected menu item 3" }
   Default { Write-Host "You did not select a valid option" }
}

Switch コンストラクトを使用すると、値の照合に加えて、パターンを照合することもできます。 -wildcard パラメーターを使用すると、-like 演算子と同じ構文を使用してパターン マッチングを実行できます。 また、-regex パラメーターを使用すると、正規表現を使用して照合を実行できます。

パターン マッチングを使用する場合、複数の一致が発生する可能性があります。このことに注意するのが重要です。 複数の一致が発生した場合、一致するすべてのパターンのスクリプト ブロックが実行されます。 この点が、スクリプト ブロックが 1 つだけ実行される If コンストラクトとの違いです。

次の例では、パターン マッチングが使用されています。

Switch -WildCard ($ip) {
   "10.*" { Write-Host "This computer is on the internal network" }
   "10.1.*" { Write-Host "This computer is in London" }
   "10.2.*" { Write-Host "This computer is in Vancouver" }
   Default { Write-Host "This computer is not on the internal network" }
 }

London ネットワークまたは Vancouver ネットワークの $ip の値では、2 つのメッセージが表示されます。 $ip に 10.x.x.x ネットワークの IP アドレスが含まれる場合、メッセージによって、コンピューターが内部ネットワークにあること、およびそのコンピューターが London または Vancouver にあることが示されます。 $ip が 10.x.x.x ネットワークの IP アドレスではない場合、メッセージによって、それが内部ネットワークにないことが示されます。

Switch コンストラクトに複数の値を含む配列を提供すると、配列内の各項目が評価されます。 前の例で、変数 $ip が 2 つの IP アドレスを含む配列である場合、両方の IP アドレスが処理されます。 配列内の各項目に対応するアクションが実行されます。