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は最後に指定します。 そうしないとエラーが発生します。

PowerShell
PR