PowerShell: switch文のパラメータの使い方
PowerShellのswitch文ではパラメータを利用することができます。 5つのパラメータ 「-Wildcard, -Regex, -CaseSensitive, -Exact, -File」 があり、これらを指定することでより柔軟な条件分岐が実現できます。
5つのパラメータを順番に見ていきます。 なお、複数のパラメータを組み合わせて使うことも可能です。 その場合「-Wildcard -CaseSensitive」のように記述します。
-Wildcard
-Wildcardパラメータは、 文字列をワイルドカード(*や?)で評価します。 switch文の条件式部分にワイルドカードを使った文字列を記述し、 評価式が一致するかどうかを調べます。
次のコードは-Wildcardを使ったswitch文の例です。
$str = "bit" switch -Wildcard ($str) { b*t { Write-Host $_ } c*t { Write-Host $_ } d*t { Write-Host $_ } Default {Write-Host "other"} } # 実行結果 bit
-Regex
-Regexパラメータは、 文字列を正規表現で評価します。 ワイルドカードよりもより細かいパターン表現での一致を 調べることができます。
次のコードは-Regexの使用例です。
$str = "bit" switch -Regex ($str) { ^b.* { Write-Host "bで始まる文字列: $_"} ^c.* { Write-Host "cで始まる文字列: $_" } ^d.* { Write-Host "dで始まる文字列: $_" } Default {Write-Host "other"} } # 実行結果 bで始まる文字列: bit
-CaseSensitive
-CaseSensitiveパラメータは文字列の大文字・小文字を区別して評価します。 デフォルトでは区別されていないため、 区別する場合はこのパラメータを指定します。-Exact
-Exactパラメータは文字列の完全一致を評価します。 大文字・小文字は区別されないため、 区別する場合は-CaseSensitiveパラメータと組み合わせます。
-File
-Fileパラメータは、 指定したファイルの内容をを一行ずつ読み込んで評価します。
例えば、ログファイルを読み込んで 「Error」や「Warning」のある行だけを表示することができます。 その場合は-Fileと-Wildcardを組み合わせます。
次のコードは ログファイル(sample.log)を読み込みこんで、 「Error*」「Warning*」の ワイルドカード評価に一致する行だけを表示します。
$file_path = "./sample.log" switch -Wildcard -File ($file_path) { Error* { Write-Host $_ } Warning* { Write-Host $_ } Default {} }
-Fileを他のパラメータと組み合わせる場合、 -Fileは最後に指定します。 そうしないとエラーが発生します。