【初心者向け】PowerShellの比較演算子を完全解説!数値・文字列の条件分岐をマスターしよう

Windows

PowerShellを使い始めたばかりの方から、こんな疑問をよく聞きます。

「PowerShellで値の比較ってどう書くの?」
「JavaScriptの==が使えないって本当?」
「文字列の部分一致はどうやって調べるの?」

PowerShellは他のプログラミング言語とは異なる独自の比較演算子を使用します。

最初は戸惑うかもしれませんが、慣れれば非常に直感的で分かりやすい記述ができるようになります。

この記事では、PowerShellの比較演算子について、初心者の方でも理解できるよう実例を交えて詳しく解説します。

スポンサーリンク

PowerShellの比較演算子の基本

他言語との違い

多くのプログラミング言語では、以下のような記号を使って比較を行います:

// JavaScript の例
if (a == 10) { console.log("10です"); }

しかし、PowerShellではハイフンとアルファベットを組み合わせた演算子を使用します:

# PowerShell の例
if ($a -eq 10) { Write-Output "10です" }

この形式により、コードが英語のように読みやすくなるという利点があります。

数値の比較演算子

PowerShellで数値を比較する際の演算子は以下の通りです:

演算子意味使用例読み方
-eq等しい$a -eq 10equal
-ne等しくない$a -ne 10not equal
-gtより大きい$a -gt 5greater than
-ltより小さい$a -lt 20less than
-ge以上$a -ge 10greater or equal
-le以下$a -le 10less or equal

実用例

# 基本的な比較
$score = 85

if ($score -ge 80) {
    Write-Output "合格です!"
} elseif ($score -ge 60) {
    Write-Output "もう少しです"
} else {
    Write-Output "不合格です"
}

# 範囲の判定
$temperature = 25
if ($temperature -ge 20 -and $temperature -le 30) {
    Write-Output "適温です"
}

文字列の比較演算子

PowerShellの文字列比較には、大文字小文字を区別するかどうかで異なる演算子を使用します。

基本的な文字列比較

目的大文字小文字を区別しない大文字小文字を区別する
等しい-ieq-ceq
等しくない-ine-cne
含まれる(ワイルドカード)-ilike-clike
正規表現マッチ-imatch-cmatch

重要なポイント: iは「ignore case」(大文字小文字を無視)、cは「case sensitive」(大文字小文字を区別)の意味です。

実用例

# 大文字小文字を無視した比較
$name = "TANAKA"
if ($name -ieq "tanaka") {
    Write-Output "名前が一致しました"  # これが実行される
}

# 大文字小文字を区別した比較
if ($name -ceq "tanaka") {
    Write-Output "名前が一致しました"  # これは実行されない
}

# 部分一致の検索
$filename = "report_2024.xlsx"
if ($filename -ilike "*report*") {
    Write-Output "レポートファイルです"
}

# 正規表現を使った検索
$email = "user@example.com"
if ($email -imatch "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$") {
    Write-Output "有効なメールアドレスです"
}

論理演算子で条件を組み合わせる

複数の条件を組み合わせる場合は、論理演算子を使用します:

演算子意味使用例
-andかつ(AND)$a -gt 0 -and $a -lt 100
-orまたは(OR)$a -eq 0 -or $b -eq 0
-not~でない(NOT)-not ($a -eq 10)
!NOTの短縮形!($a -eq 10)

実用例

# 複合条件の例
$age = 25
$hasLicense = $true

if ($age -ge 18 -and $hasLicense) {
    Write-Output "運転できます"
}

# OR条件の例
$dayOfWeek = "Saturday"
if ($dayOfWeek -eq "Saturday" -or $dayOfWeek -eq "Sunday") {
    Write-Output "週末です"
}

# NOT条件の例
$isLoggedIn = $false
if (-not $isLoggedIn) {
    Write-Output "ログインしてください"
}

配列やオブジェクトとの比較

PowerShellでは、配列に対しても比較演算子を使用できます:

# 配列内の検索
$numbers = @(1, 2, 3, 4, 5)
$result = $numbers -eq 3  # 結果: 3

# 複数の値にマッチする場合
$fruits = @("Apple", "Banana", "Cherry", "Apricot")
$result = $fruits -like "A*"  # 結果: "Apple", "Apricot"

# 配列に特定の値が含まれるかチェック
if ($fruits -contains "Apple") {
    Write-Output "りんごがあります"
}

よくある間違いと注意点

他言語の演算子を使ってしまう

# 間違い
if ($a == 10) { }  # エラーになる

# 正しい
if ($a -eq 10) { }

大文字小文字の扱いを間違える

$name = "PowerShell"

# 意図しない結果になる可能性
if ($name -ceq "powershell") { }  # false

# 通常はこちらを使用
if ($name -ieq "powershell") { }  # true

文字列と数値の自動変換に注意

# PowerShellは自動的に型変換を行う
$a = "10"  # 文字列
$b = 10    # 数値

if ($a -eq $b) {
    Write-Output "等しい"  # これが実行される
}

実践的な使用例

ファイル処理での条件分岐

$files = Get-ChildItem -Path "C:\Temp"

foreach ($file in $files) {
    if ($file.Extension -ieq ".txt" -and $file.Length -gt 0) {
        Write-Output "テキストファイル: $($file.Name)"
    } elseif ($file.Extension -imatch "\.(jpg|png|gif)$") {
        Write-Output "画像ファイル: $($file.Name)"
    }
}

システム情報の判定

$os = Get-WmiObject -Class Win32_OperatingSystem
$version = $os.Version

if ($version -like "10.*") {
    Write-Output "Windows 10 または 11 です"
} elseif ($version -like "6.3.*") {
    Write-Output "Windows 8.1 です"
} else {
    Write-Output "その他のWindowsバージョンです"
}

まとめ

PowerShellの比較演算子は、最初は慣れない記法かもしれませんが、以下のような利点があります:

主なポイント:

  • ハイフン付きの演算子(-eq-neなど)を使用
  • 文字列比較では大文字小文字の扱いを明示的に指定(-ieq vs -ceq
  • 論理演算子(-and-or-not)で複合条件を記述
  • 配列に対しても同じ演算子が使用可能

覚えておきたいコツ:

  • 迷ったら-ieq(大文字小文字を無視)を使う
  • -likeでワイルドカード検索、-matchで正規表現検索
  • 代入(=)と比較(-eq)を混同しない

これらの比較演算子をマスターすることで、PowerShellでより柔軟で読みやすいスクリプトが書けるようになります。

まずは基本的な演算子から始めて、徐々に複雑な条件分岐にチャレンジしてみてください!

コメント

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