PowerShell: 特定の文字列を含むかどうかをif文でチェックする方法

PowerShellのifステートメントの条件式で、 特定の文字列を含むかどうかを調べて処理を分岐させたい場合、 ContainsメソッドかIndexOfメソッドを使います。 各メソッドの戻り値に応じて処理を分岐するように記述します。

Containsメソッドを使った方法

まずはContainsメソッドを使う方法です。
Containsメソッドは検索文字列が含む場合にTrue、 含まない場合にFalseを返します。 ですから戻り値をそのままif文の条件式に利用します。

if文とContainsを使った具体的なコードは次の通りです。 文字列を含む場合と、含まない場合で処理を分岐させています。

$str = "hijklmnopqrstu"

$s = "kjm"

if ($str.Contains($s)){
	Write-Host "文字列を含む"
} else {
	Write-Host "文字列を含まない"
}

文字列を含まない時だけ処理を記述する場合は、 論理否定演算子「-!」を使って真偽を反転させます。

if (-! $str.Contains($s)){
	Write-Host "文字列を含まない"
}

IndexOfメソッドを使った方法

次はIndexOfメソッドを使う方法です。
IndexOfメソッドは検索文字列が見つかった位置を返し、 見つからなかった場合は-1を返します。 ですから戻り値が0以上の場合は文字列が含まれ、 それ以外の場合は含まれないことになります。

if文とIndexOfを使った具体的なコードは次の通りです。 先程と同じく、文字列を含むかどうかで処理を分岐しています。 条件式は比較演算子「-ge(以上)」を使って「戻り値 -ge 0」 としています。

$str = "hijklmnopqrstu"

$s = "klm"

if (($str.IndexOf($s) -ge 0)) {
	Write-Host "文字列を含む"
} else {
	Write-Host "文字列を含まない"
}

文字列を含まない場合だけ処理を記述する場合、 IndexOfメソッドの戻り値が「-1」なのを利用します。 比較演算子「-eq(等しい)」を使って「戻り値 -eq -1」 としています。

if (($str.IndexOf($s) -eq -1)) {
	Write-Host "文字列を含まない"
}

IndexOfを使う場合、 条件式の書き方は複数ありますから、 自分がわかりやすいように書いてください。

(まとめ記事: PowerShell if文

PowerShell