【初心者向け】PowerShellの論理演算子を完全マスター|AND・OR・NOTを使った条件分岐テクニック

Windows

PowerShellでスクリプトを書くときに欠かせないのが、「条件分岐」です。

特定の条件を満たすときだけ処理を行ったり、複数の条件を組み合わせたりするためには、論理演算子(AND・OR・NOT)を正しく理解する必要があります。

この記事では、PowerShellの論理演算子について、基本から実践的な使い方までを初心者向けに丁寧に解説します。

「if文で複数条件をどう書くの?」「-and&&の違いって何?」そんな疑問にも答えます!

スポンサーリンク

PowerShellにおける論理演算子とは?

論理演算子とは、複数の条件を組み合わせて1つの「真(True)/偽(False)」を導くための記号やキーワードです。

PowerShellでよく使う論理演算子は以下の3つです。

種類演算子意味
AND-and両方がTrueのときだけTrue
OR-orどちらかがTrueならTrue
NOT-notTrueをFalseに、FalseをTrueに反転

これらを使いこなすことで、複雑な条件をスクリプトに組み込むことができます。

基本構文と使用例

-and(かつ)

-and演算子は、両方の条件が真(True)の場合にのみ、全体が真になります。

if (($a -gt 10) -and ($a -lt 20)) {
    "aは10より大きく、20より小さい"
}

$aが11〜19の範囲内のときだけ、メッセージが表示されます。

-andの真偽表

条件1条件2結果
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse

-or(または)

-or演算子は、どちらかの条件が真(True)であれば、全体が真になります。

if (($b -eq "admin") -or ($b -eq "manager")) {
    "特権ユーザーです"
}

$badminまたはmanagerのときに実行されます。

-orの真偽表

条件1条件2結果
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

-not(否定)

-not演算子は、条件の結果を反転させます。Trueを持つ式はFalseに、Falseを持つ式はTrueになります。

if (-not ($c -eq 0)) {
    "cは0ではありません"
}

$cが0以外のときに実行されます。

別の書き方として、!を使用することもできます:

if (!($c -eq 0)) {
    "cは0ではありません"
}

-notの真偽表

条件結果
TrueFalse
FalseTrue

AND・ORのネスト(複雑な条件式)

複数の条件を組み合わせる場合、括弧を使ってグループ化すると、処理の優先順位を明確にできます。

if ((($x -gt 5) -and ($x -lt 10)) -or ($x -eq 20)) {
    "条件を満たしました"
}

$xが6〜9または20なら実行されます。

括弧()でグルーピングすることで、処理の優先順位を明確にできます。

ネストしたロジックを理解する際の考え方:

  1. まず内側の括弧:($x -gt 5) -and ($x -lt 10) → 6〜9ならTrue
  2. 次に外側の条件:「6〜9」または「20」

ショートカット演算子:&&と||

PowerShell 7以降では、シェルっぽい論理演算子も使えます。

演算子意味使用例
&&左がTrueなら右を実行Test-Path "file.txt" && Remove-Item "file.txt"
||左がFalseなら右を実行Test-Path "file.txt" || New-Item "file.txt"

これらは「if文」ではなく、コマンドの実行可否を制御するときに使います。

-andと&&の違い

  • -and:条件文の中で使う論理演算子
  • &&:コマンドの連結に使うショートカット演算子
# -andの例(条件評価)
if ((Test-Path "file.txt") -and ($fileSize -gt 1MB)) {
    # 処理
}

# &&の例(コマンド連結)
Test-Path "file.txt" && Write-Host "ファイルが存在します"

論理演算子が使われる実践シーン

ユーザー情報の条件チェック

if (($user.IsActive -eq $true) -and ($user.LastLogin -gt (Get-Date).AddDays(-30))) {
    "最近ログインしたアクティブユーザーです"
}

ファイルチェックとログ

if ((Test-Path "data.csv") -or (Test-Path "backup.csv")) {
    "いずれかのファイルが存在します"
}

複数条件を使ったフィルタリング

Get-Service | Where-Object { ($_.Status -eq "Running") -and ($_.StartType -eq "Automatic") }

エラーハンドリング

try {
    $result = Invoke-SomeCommand
    if (($result -ne $null) -and ($result.Status -eq "Success")) {
        "操作は成功しました"
    }
}
catch {
    "エラーが発生しました: $_"
}

配列内の条件検索

$foundItem = $collection | Where-Object { 
    ($_.Name -like "*target*") -and 
    (-not $_.IsArchived) -and 
    ($_.CreatedDate -gt (Get-Date).AddMonths(-1)) 
}

よくあるミスと注意点

andやorを使ってしまう

PowerShellでは、-and, -or, -notが正解。
他の言語と混同しやすいので注意!

「-(ハイフン)」は忘れないように!

# 間違い
if ($a > 10 and $b < 20) { ... }  # エラーになる

# 正解
if (($a -gt 10) -and ($b -lt 20)) { ... }

比較演算子と混同してしまう

  • -eq:等しい(比較演算子)
  • -and:両方がTrueかどうか(論理演算子)

用途が違うので、正しく使い分けましょう。

# 間違い
if ($a -and $b) { ... }  # $aと$bの論理積ではなく、両方の真偽値を評価

# 正解(両方が特定の値かチェックする場合)
if (($a -eq "value1") -and ($b -eq "value2")) { ... }

括弧の使い忘れ

複雑な条件の場合、括弧を忘れると思わぬ評価結果になることがあります。

# 曖昧な書き方
if ($a -gt 5 -and $b -lt 10 -or $c -eq 0) { ... }

# 明確な書き方
if ((($a -gt 5) -and ($b -lt 10)) -or ($c -eq 0)) { ... }

短絡評価の理解不足

PowerShellの論理演算子は「短絡評価」を行います。

つまり、-andの場合、左側がFalseなら右側は評価されません。
同様に、-orの場合は左側がTrueなら右側は評価されません。

# 注意: $nullチェックを先にしないと例外発生の可能性がある
if (($obj -ne $null) -and ($obj.Property -eq "Value")) { ... }

まとめ

PowerShellの-and-or-notは、条件式を柔軟に構築するための超基本ツールです。

うまく活用することで、より正確なスクリプト制御や、複雑な条件分岐が可能になります。

本記事のポイント:

  • -and:両方TrueのときにTrue
  • -or:どちらかがTrueであればTrue
  • -not:True/Falseを反転
  • PowerShell 7以降では &&|| も使える
  • 複雑な条件は括弧でグループ化する
  • 条件式のネストにより、より複雑なロジックも表現可能

PowerShellの自動化・運用管理スクリプトを作るうえで、論理演算子は避けて通れません。

コメント

タイトルとURLをコピーしました