PowerShell: if文でTrue・False・Nullを判定する

PowerShellのif文の条件式で、 変数や関数の戻り値が True, False, Nullかどうかを判定する方法を紹介します。

if文の条件式でTrue・Falseを判定

True・Falseの真偽値を判定する場合、 変数やメソッドを条件式の丸括弧()の中にそのまま単独で記述するのが一般的です。

例えば、真偽値型の変数$blnがTrueかFalseかを判定するコードは 次のように丸括弧()の中に「$bln」と記述します。

PowerShell
if ($bln) {
	# Trueの場合
} else {
	# Falseの場合
}

Falseの場合だけを知りたい時は、 論理否定演算子の「-not」か「-!」を$blnの前に記述します。

if (-! $bln){
	# Falseの場合
	Write-Host "False"
}

あまり使いませんが、 True・Falseを表す$true、$falseを条件式の中で記述しても構いません。 変数$blnがFalseかどうかを知りたい場合のコードは次の通りです。

if ($bln -eq $false){
	# Falseの場合
	Write-Host "False"
}

注意点としてPowerShellでは真偽値を表す時にTrue、Falseと記述するとエラーになります。 $true、$falseと先頭に$ドル記号を付ける必要があり、 どちらもPowerShellのシェル変数の1つです。

if文の条件式でNullを判定

条件式でNullかどうかを判定する場合、 シェル変数$nullと比較演算子を使います。 次のコードは変数$aがNullかどうかを判定しています。

if ($null -eq $a){
	Write-Host "Null"
} else {
	Write-Host "Not Null"
}

注意点が2点あって1つ目は、 先程のTrue・Falseと同じようにNullではなく$nullと記述します。 $nullもシェル変数の1つです。

2つ目の注意点は、$nullを比較演算子の左側に置くことです。 違和感があると思いますが、 PowerShellではNullを確認する場合、 $nullを左側に置くことがベストプラクティスとされています。
$null について知りたかったことのすべて - PowerShell | Microsoft Docs

PowerShellで使用できるメソッドの1つにIsNullOrEmptyメソッドがあります。 .NET Framework Stringクラスのメソッドです。 指定された変数がNullか空文字("")の場合にTrue、その他はFalseを返します。 Nullと空文字を同時に判定したい時はこのメソッドがおすすめです。

次のコードはIsNullOrEmptyメソッドを使って変数$aが「Nullまたは空文字」かどうかを 判定しています。

if ([string]::IsNullOrEmpty($a)) {
	Write-Host "Null or Empty"
} else {
	Write-Host "other"
}

(まとめ記事: PowerShell if文

PowerShell