PowerShell: if文の条件式でand・or・notを使う

PowerShellのif文の条件式の中で論理演算子を使う方法を解説します。 論理演算子の中でも良く使う「-and、-or、-not」 の使い方を順番に説明します。 PowerShellで論理演算子を使う場合の注意点として「-and」のように 「- ハイフン」記号をつけ忘れないようにしてください。

-and演算子

-and」は論理積です。 「条件1 -and 条件2」とある場合、 条件1と条件2の両方がTrueの場合のみTrueとなり、 それ以外はFalseとなります。

次のコードのif文の条件式は、 「変数$aが10かつ変数$bが10」の場合Trueとなります。

if ($a -eq 10 -and $b -eq 10){
	# 処理
}

PowerShellでは論理演算子も算術演算子も「-英文字」で表すため、 条件式の部分がわかりにくくなります。 見づらい場合は次のように()丸括弧をいれるとわかりやすくなります。

if (($a -eq 10) -and ($b -eq 10)){
	# 処理
}

条件式を複数行で書く

もし条件式が長くなる場合は無理に1行で記述せずに、 複数行に渡って書くと見やすくなります。 条件式を複数行で書く場合、 行末に記号を入れる必要もなく普通に改行するだけです。

if (($a -eq 10) -and 
	($b -eq 10) -and
	($c -eq 10)){
	# 処理
}

-or演算子

-or」は論理和です。 「条件1 -or 条件2」とある場合、 条件1と条件2のどちらかがTrueであればTrueとなり、 両方ともFalseであればFalseとなります。

次のコードのif文の条件式は、 「変数$aが10、変数$bが10」のどちらかが成立すれば Trueとなります。

if (($a -eq 10) -or ($b -eq 10)){
	# 処理
}

次のように3つ以上の条件式を -or でつなぐこともできます。

if (($a -eq 10) -or 
	($b -eq 10) -or 
	($c -eq 10)){
	# 処理
}

-not演算子

-not」は論理否定です。 「-not」の代わりに「-!」と記述することもできます。 真・偽が反転するので 「-not 条件」場合、条件がTrueであればFalseとなり、 条件がFalseであればTrueとなります。

次のコードは 変数$flgがTrueの場合、ステートメントブロック内の処理を実行します。

if ($flg){
	# 処理
}

上のif文の条件式を、 -not演算子を使って反転すると、 変数$flgがFalseの場合処理を実行するようになります。

if (-not $flg){
	# $flgがFalseの場合に実行される
	# 処理
}

-not演算子を使う場合の注意点として、 次のように「-not (条件)」と記述するとエラーになります。

# 条件式の書き方がエラーとなる
if -not ($flg){
	# 処理
}

# 実行結果(エラーメッセージ)
Missing '(' after 'if' in if statement.

下のように「-not」も()内に含まれるように記述してください。

if (-not ($flg)){
	# 処理
}

(まとめ記事: PowerShell if文

PowerShell