PowerShellでスクリプトを書くときに欠かせないのが、「条件分岐」です。
特定の条件を満たすときだけ処理を行ったり、複数の条件を組み合わせたりするためには、論理演算子(AND・OR・NOT)を正しく理解する必要があります。
この記事では、PowerShellの論理演算子について、基本から実践的な使い方までを初心者向けに丁寧に解説します。
「if文で複数条件をどう書くの?」「-and
と&&
の違いって何?」そんな疑問にも答えます!
PowerShellにおける論理演算子とは?

論理演算子とは、複数の条件を組み合わせて1つの「真(True)/偽(False)」を導くための記号やキーワードです。
PowerShellでよく使う論理演算子は以下の3つです。
種類 | 演算子 | 意味 |
---|---|---|
AND | -and | 両方がTrueのときだけTrue |
OR | -or | どちらかがTrueならTrue |
NOT | -not | TrueをFalseに、FalseをTrueに反転 |
これらを使いこなすことで、複雑な条件をスクリプトに組み込むことができます。
基本構文と使用例

-and(かつ)
-and
演算子は、両方の条件が真(True)の場合にのみ、全体が真になります。
if (($a -gt 10) -and ($a -lt 20)) {
"aは10より大きく、20より小さい"
}
→ $a
が11〜19の範囲内のときだけ、メッセージが表示されます。
-andの真偽表
条件1 | 条件2 | 結果 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
-or(または)
-or
演算子は、どちらかの条件が真(True)であれば、全体が真になります。
if (($b -eq "admin") -or ($b -eq "manager")) {
"特権ユーザーです"
}
→ $b
がadmin
またはmanager
のときに実行されます。
-orの真偽表
条件1 | 条件2 | 結果 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
-not(否定)
-not
演算子は、条件の結果を反転させます。Trueを持つ式はFalseに、Falseを持つ式はTrueになります。
if (-not ($c -eq 0)) {
"cは0ではありません"
}
→ $c
が0以外のときに実行されます。
別の書き方として、!
を使用することもできます:
if (!($c -eq 0)) {
"cは0ではありません"
}
-notの真偽表
条件 | 結果 |
---|---|
True | False |
False | True |
AND・ORのネスト(複雑な条件式)

複数の条件を組み合わせる場合、括弧を使ってグループ化すると、処理の優先順位を明確にできます。
if ((($x -gt 5) -and ($x -lt 10)) -or ($x -eq 20)) {
"条件を満たしました"
}
→ $x
が6〜9または20なら実行されます。
括弧()でグルーピングすることで、処理の優先順位を明確にできます。
ネストしたロジックを理解する際の考え方:
- まず内側の括弧:
($x -gt 5) -and ($x -lt 10)
→ 6〜9ならTrue - 次に外側の条件:「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の自動化・運用管理スクリプトを作るうえで、論理演算子は避けて通れません。
コメント