PowerShell 比較演算子一覧:等価、不等価、包含、型比較を網羅
PowerShell は、スクリプトや自動化タスクにおいてデータを操作するための強力なツールです。その中心的な機能の一つが、さまざまなデータを比較するための比較演算子です。比較演算子は、条件付きロジックの構築、データのフィルタリング、およびさまざまなオブジェクトの属性の検証に不可欠です。本稿では、PowerShell の比較演算子を網羅的に解説し、等価、不等価、包含、型比較など、さまざまなカテゴリに分類して、具体的な例を交えながら詳細に説明します。
はじめに: 比較演算子の重要性
比較演算子は、プログラムの制御フローを決定するために使用される条件文 (例えば、if
、elseif
、else
ステートメント) の基盤を形成します。PowerShell スクリプトで値を比較することで、スクリプトの実行パスを動的に変更し、異なる状況に柔軟に対応できます。
比較演算子を使用する主なシナリオは以下の通りです。
- 条件分岐: 特定の条件が満たされる場合にのみコードのセクションを実行します。
- データフィルタリング: 特定の基準を満たすデータセットから項目を選択します。
- オブジェクト検証: オブジェクトのプロパティが予想される値と一致することを確認します。
- ループ制御: ループの反復回数を制御します (例:
while
ループで条件が満たされるまでループを続行します)。 - エラー処理: エラーが発生した場合に特定のアクションを実行します。
1. 等価演算子
等価演算子は、2つの値が等しいかどうかを比較するために使用されます。PowerShell には、大文字と小文字を区別する等価演算子 (-eq
) と、大文字と小文字を区別しない等価演算子 (-ieq
) があります。
-
-eq
(等しい)-eq
演算子は、2つの値が完全に等しい場合に$true
を返し、そうでない場合は$false
を返します。大文字と小文字が区別されます。powershell
"apple" -eq "apple" # 出力: True
"apple" -eq "Apple" # 出力: False
10 -eq 10 # 出力: True
10 -eq "10" # 出力: True (型変換)注意: PowerShell は、型が異なる値を比較する際に自動的に型変換を試みることがあります。上記の例では、整数
10
と文字列"10"
が比較され、文字列が整数に変換されて比較が行われます。 -
-ieq
(大文字と小文字を区別しない等しい)-ieq
演算子は、2つの値が等しいかどうかを比較しますが、大文字と小文字を区別しません。powershell
"apple" -ieq "apple" # 出力: True
"apple" -ieq "Apple" # 出力: True
"APPLE" -ieq "apple" # 出力: True
2. 不等価演算子
不等価演算子は、2つの値が等しくないかどうかを比較するために使用されます。等価演算子と同様に、大文字と小文字を区別する演算子 (-ne
) と、大文字と小文字を区別しない演算子 (-ine
) があります。
-
-ne
(等しくない)-ne
演算子は、2つの値が等しくない場合に$true
を返し、等しい場合は$false
を返します。大文字と小文字が区別されます。powershell
"apple" -ne "banana" # 出力: True
"apple" -ne "apple" # 出力: False
"apple" -ne "Apple" # 出力: True
10 -ne 20 # 出力: True
10 -ne "10" # 出力: False (型変換) -
-ine
(大文字と小文字を区別しない等しくない)-ine
演算子は、2つの値が等しくないかどうかを比較しますが、大文字と小文字を区別しません。powershell
"apple" -ine "banana" # 出力: True
"apple" -ine "apple" # 出力: False
"apple" -ine "Apple" # 出力: False
"APPLE" -ine "apple" # 出力: False
3. 比較演算子 (大小比較)
比較演算子は、数値または順序付け可能なオブジェクトを比較するために使用されます。PowerShell は、以下の比較演算子を提供します。
-
-gt
(より大きい)-gt
演算子は、左側の値が右側の値より大きい場合に$true
を返し、そうでない場合は$false
を返します。powershell
10 -gt 5 # 出力: True
5 -gt 10 # 出力: False
10 -gt 10 # 出力: False
"b" -gt "a" # 出力: True (文字コードに基づく比較) -
-ge
(以上)-ge
演算子は、左側の値が右側の値以上の場合に$true
を返し、そうでない場合は$false
を返します。powershell
10 -ge 5 # 出力: True
5 -ge 10 # 出力: False
10 -ge 10 # 出力: True
"b" -ge "a" # 出力: True
"a" -ge "a" # 出力: True -
-lt
(より小さい)-lt
演算子は、左側の値が右側の値より小さい場合に$true
を返し、そうでない場合は$false
を返します。powershell
5 -lt 10 # 出力: True
10 -lt 5 # 出力: False
10 -lt 10 # 出力: False
"a" -lt "b" # 出力: True -
-le
(以下)-le
演算子は、左側の値が右側の値以下の場合に$true
を返し、そうでない場合は$false
を返します。powershell
5 -le 10 # 出力: True
10 -le 5 # 出力: False
10 -le 10 # 出力: True
"a" -le "b" # 出力: True
"a" -le "a" # 出力: True注意: これらの演算子は、日付や時間などの順序付け可能なオブジェクトにも使用できます。
4. 包含演算子
包含演算子は、ある値がコレクション (例えば、配列や文字列) に含まれているかどうかを判定するために使用されます。
-
-contains
(含む)-contains
演算子は、右側のコレクションに左側の値が含まれている場合に$true
を返し、そうでない場合は$false
を返します。大文字と小文字が区別されます。powershell
@(1, 2, 3) -contains 2 # 出力: True
@(1, 2, 3) -contains 4 # 出力: False
"hello world" -contains "world" # 出力: True
"hello world" -contains "World" # 出力: False -
-icontains
(大文字と小文字を区別しない含む)-icontains
演算子は、右側のコレクションに左側の値が含まれているかどうかを判定しますが、大文字と小文字を区別しません。powershell
"hello world" -icontains "world" # 出力: True
"hello world" -icontains "World" # 出力: True
"HELLO WORLD" -icontains "world" # 出力: True -
-notcontains
(含まない)-notcontains
演算子は、右側のコレクションに左側の値が含まれていない場合に$true
を返し、そうでない場合は$false
を返します。大文字と小文字が区別されます。powershell
@(1, 2, 3) -notcontains 4 # 出力: True
@(1, 2, 3) -notcontains 2 # 出力: False
"hello world" -notcontains "World" # 出力: True
"hello world" -notcontains "world" # 出力: False -
-inotcontains
(大文字と小文字を区別しない含まない)-inotcontains
演算子は、右側のコレクションに左側の値が含まれていないかどうかを判定しますが、大文字と小文字を区別しません。powershell
"hello world" -inotcontains "World" # 出力: False
"hello world" -inotcontains "universe" # 出力: True注意:
-contains
と-notcontains
は、コレクション全体を検索するため、大規模なコレクションではパフォーマンスに影響を与える可能性があります。
5. パターンマッチング演算子
パターンマッチング演算子は、文字列が特定のパターンに一致するかどうかを判定するために使用されます。
-
-like
(Like)-like
演算子は、右側のパターンを使用して左側の文字列を比較します。ワイルドカード文字 (*
と?
) を使用してパターンを定義できます。大文字と小文字が区別されます。powershell
"hello world" -like "hello*" # 出力: True (hello で始まる)
"hello world" -like "*world" # 出力: True (world で終わる)
"hello world" -like "h?llo*" # 出力: True (? は任意の 1 文字)
"hello world" -like "Hello*" # 出力: False (大文字と小文字が区別される) -
-ilike
(大文字と小文字を区別しない Like)-ilike
演算子は、-like
と同様に動作しますが、大文字と小文字を区別しません。powershell
"hello world" -ilike "Hello*" # 出力: True
"HELLO WORLD" -ilike "hello*" # 出力: True -
-notlike
(Not Like)-notlike
演算子は、-like
演算子の否定形です。左側の文字列が右側のパターンに一致しない場合に$true
を返し、一致する場合は$false
を返します。大文字と小文字が区別されます。powershell
"hello world" -notlike "goodbye*" # 出力: True
"hello world" -notlike "hello*" # 出力: False -
-inotlike
(大文字と小文字を区別しない Not Like)-inotlike
演算子は、-ilike
演算子の否定形です。powershell
"hello world" -inotlike "Goodbye*" # 出力: True
"hello world" -inotlike "Hello*" # 出力: False -
-match
(Match)-match
演算子は、正規表現を使用して左側の文字列を右側のパターンと比較します。パターンが見つかった場合、$true
を返し、自動的に$matches
変数を設定します。$matches
変数には、マッチした部分文字列とキャプチャグループが含まれます。大文字と小文字が区別されます。“`powershell
“hello world” -match “world” # 出力: True
$matches # 出力:
# Name Value
# —- —–
# 0 world“hello world” -match “(h.*o)” # 出力: True
$matches # 出力:
# Name Value
# —- —–
# 1 hello
# 0 hello“hello world” -match “World” # 出力: False (大文字と小文字が区別される)
“` -
-imatch
(大文字と小文字を区別しない Match)-imatch
演算子は、-match
と同様に動作しますが、大文字と小文字を区別しません。powershell
"hello world" -imatch "World" # 出力: True
$matches # 出力:
# Name Value
# ---- -----
# 0 World -
-notmatch
(Not Match)-notmatch
演算子は、-match
演算子の否定形です。左側の文字列が右側の正規表現に一致しない場合に$true
を返し、一致する場合は$false
を返します。大文字と小文字が区別されます。powershell
"hello world" -notmatch "universe" # 出力: True
"hello world" -notmatch "world" # 出力: False -
-inotmatch
(大文字と小文字を区別しない Not Match)-inotmatch
演算子は、-imatch
演算子の否定形です。powershell
"hello world" -inotmatch "Universe" # 出力: True
"hello world" -inotmatch "World" # 出力: False注意: 正規表現は非常に強力ですが、複雑になる可能性もあります。正規表現の構文を理解し、適切なエスケープを行うことが重要です。
6. 型比較演算子
型比較演算子は、オブジェクトの型を検証するために使用されます。
-
-is
(Is)-is
演算子は、左側のオブジェクトが右側の指定された型 (またはその派生型) のインスタンスである場合に$true
を返し、そうでない場合は$false
を返します。powershell
10 -is [int] # 出力: True
"hello" -is [string] # 出力: True
@(1, 2, 3) -is [array] # 出力: True
10 -is [string] # 出力: False注意:
[type]
は、.NET Framework の型を表します。 -
-isnot
(Is Not)-isnot
演算子は、-is
演算子の否定形です。powershell
10 -isnot [string] # 出力: True
"hello" -isnot [int] # 出力: True
10 -isnot [int] # 出力: False
7. その他の演算子
-
-in
(In)
-in
演算子は、左側の値が右側のコレクションに含まれている場合に$true
を返し、含まれていない場合に$false
を返します。これは-contains
と似ていますが、オペランドの順序が逆になっています。powershell
2 -in @(1, 2, 3) # 出力: True
4 -in @(1, 2, 3) # 出力: False -
-notin
(Not In)
-notin
演算子は、-in
演算子の否定形です。powershell
4 -notin @(1, 2, 3) # 出力: True
2 -notin @(1, 2, 3) # 出力: False
比較演算子の優先順位
PowerShell の演算子には優先順位があり、複雑な式でどの演算子が最初に評価されるかを決定します。一般的に、括弧 ()
は優先順位が最も高く、算術演算子、比較演算子、論理演算子の順に優先順位が低くなります。式の意図を明確にするために、括弧を積極的に使用することをお勧めします。
実践的な例
以下に、比較演算子の使用例をいくつか示します。
例 1: ファイルの存在を確認する
“`powershell
$filePath = “C:\temp\myfile.txt”
if (Test-Path $filePath) {
Write-Host “ファイルが存在します。”
} else {
Write-Host “ファイルが存在しません。”
}
“`
例 2: プロセスの状態を確認する
“`powershell
$processName = “notepad”
$process = Get-Process -Name $processName -ErrorAction SilentlyContinue
if ($process -eq $null) {
Write-Host “$processName は実行されていません。”
} else {
Write-Host “$processName は実行されています (PID: $($process.Id))”
}
“`
例 3: ユーザー入力を検証する
“`powershell
$age = Read-Host “年齢を入力してください”
if ($age -match “^\d+$”) {
if ($age -ge 18) {
Write-Host “成人です。”
} else {
Write-Host “未成年です。”
}
} else {
Write-Host “無効な年齢です。数値を入力してください。”
}
“`
例 4: 配列内の要素をフィルタリングする
“`powershell
$numbers = @(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
$evenNumbers = $numbers | Where-Object { $_ % 2 -eq 0 }
Write-Host “偶数:” $evenNumbers
“`
例 5: 文字列内のパターンを検索する
“`powershell
$logLine = “2023-10-27 10:00:00 ERROR: Something went wrong”
if ($logLine -match “ERROR”) {
Write-Host “エラーが見つかりました。”
Write-Host “エラーメッセージ: $($matches[0])”
}
“`
まとめ
PowerShell の比較演算子は、スクリプトの制御フローを制御し、データを操作するための不可欠なツールです。等価、不等価、大小比較、包含、パターンマッチング、型比較など、さまざまな種類の演算子を理解することで、より強力で柔軟な PowerShell スクリプトを作成できます。本稿で提供された詳細な説明と例を参考に、これらの演算子を効果的に活用し、自動化タスクを効率化してください。PowerShell は、型変換を自動的に試みるため、予期せぬ結果を避けるために、比較する値の型を意識することが重要です。 また、-contains
と-like
はコレクション全体または文字列全体を評価するため、大きなデータセットに対して使用する場合はパフォーマンスへの影響を考慮する必要があります。正規表現を使う際は、構文が複雑になるため、事前にテストしてから使用するようにしてください。