PowerShellを使い始めると、こんな疑問に直面することがあります:
「よくある==
が使えないの?」
「演算子の種類が多すぎて覚えられない…」
「どの演算子をいつ使えばいいかわからない」
PowerShellの演算子は独特な記法を使いますが、体系的に理解すれば非常に強力で使いやすいツールです。
この記事では、PowerShellで使用できる演算子を種類別に整理し、実例を交えて詳しく解説します。
PowerShell演算子の基本

PowerShellの演算子は、以下のカテゴリに分類されます:
種類 | 主な用途 | 特徴 |
---|---|---|
算術演算子 | 数値計算 | 他言語と似ている |
代入演算子 | 変数への値の設定 | 複合代入演算子が豊富 |
比較演算子 | 値の比較・判定 | ハイフン付きキーワード形式 |
論理演算子 | 条件の組み合わせ | 英語的な表現 |
型演算子 | 型判定・変換 | .NET型システムと連携 |
文字列演算子 | 文字列操作・パターンマッチ | 大文字小文字の区別オプション |
配列・範囲演算子 | 配列操作・範囲生成 | 直感的な記法 |
特殊演算子 | パイプライン・null処理など | PowerShell特有の機能 |
算術演算子
基本的な数学計算を行う演算子です。他のプログラミング言語とほぼ同じです。
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
+ | 加算 | 5 + 3 | 8 |
- | 減算 | 10 - 4 | 6 |
* | 乗算 | 6 * 7 | 42 |
/ | 除算 | 15 / 3 | 5 |
% | 剰余(余り) | 17 % 5 | 2 |
実用例
# 基本的な計算
$price = 1000
$tax = $price * 0.1
$total = $price + $tax
Write-Output "合計: $total 円"
# 文字列の結合にも使用可能
$firstName = "山田"
$lastName = "太郎"
$fullName = $firstName + $lastName
Write-Output $fullName # 出力: 山田太郎
# 配列の結合
$array1 = @(1, 2, 3)
$array2 = @(4, 5, 6)
$combined = $array1 + $array2 # 結果: 1, 2, 3, 4, 5, 6
代入演算子

変数に値を代入する演算子です。基本的な代入に加え、計算と代入を同時に行う複合代入演算子があります。
演算子 | 説明 | 例 | 意味 |
---|---|---|---|
= | 値の代入 | $a = 10 | $aに10を代入 |
+= | 加算して代入 | $a += 5 | $a = $a + 5 |
-= | 減算して代入 | $a -= 3 | $a = $a – 3 |
*= | 乗算して代入 | $a *= 2 | $a = $a * 2 |
/= | 除算して代入 | $a /= 4 | $a = $a / 4 |
%= | 剰余を代入 | $a %= 3 | $a = $a % 3 |
実用例
# カウンタの増減
$counter = 0
$counter += 1 # インクリメント
$counter *= 2 # 倍にする
Write-Output $counter # 出力: 2
# 文字列の追加
$message = "Hello"
$message += " World"
Write-Output $message # 出力: Hello World
# 配列に要素を追加
$fruits = @("Apple", "Banana")
$fruits += "Cherry"
Write-Output $fruits # 出力: Apple, Banana, Cherry
比較演算子
値を比較するための演算子です。
PowerShell特有のハイフン付きキーワード形式を使用します。
基本的な比較演算子
演算子 | 意味 | 読み方 | 例 |
---|---|---|---|
-eq | 等しい | equal | $a -eq 10 |
-ne | 等しくない | not equal | $a -ne 10 |
-gt | より大きい | greater than | $a -gt 5 |
-lt | より小さい | less than | $a -lt 20 |
-ge | 以上 | greater or equal | $a -ge 10 |
-le | 以下 | less or equal | $a -le 10 |
大文字小文字を考慮した比較
演算子 | 説明 | 例 |
---|---|---|
-ieq | 大文字小文字を無視して等しい | "Hello" -ieq "hello" → $true |
-ceq | 大文字小文字を区別して等しい | "Hello" -ceq "hello" → $false |
実用例
# 数値の比較
$score = 85
if ($score -ge 80) {
Write-Output "優秀です"
} elseif ($score -ge 60) {
Write-Output "合格です"
} else {
Write-Output "不合格です"
}
# 文字列の比較(大文字小文字を無視)
$userInput = "YES"
if ($userInput -ieq "yes") {
Write-Output "処理を続行します"
}
# 配列に対する使用
$numbers = @(1, 2, 3, 4, 5)
$evens = $numbers | Where-Object { $_ -gt 2 -and $_ -le 4 }
Write-Output $evens # 出力: 3, 4
論理演算子

複数の条件を組み合わせるための演算子です。
演算子 | 意味 | 例 |
---|---|---|
-and | かつ(両方が真) | $a -gt 0 -and $a -lt 10 |
-or | または(いずれかが真) | $a -eq 0 -or $b -eq 0 |
-not | ~でない(否定) | -not ($a -eq 10) |
! | NOT演算子(短縮形) | !($a -eq 10) |
-xor | 排他的OR | $a -xor $b |
実用例
# 複合条件の判定
$age = 25
$hasLicense = $true
$hasExperience = $false
if ($age -ge 18 -and $hasLicense) {
Write-Output "運転可能です"
}
# 複数の条件のいずれかが成立
$day = "Saturday"
if ($day -eq "Saturday" -or $day -eq "Sunday") {
Write-Output "週末です"
}
# 否定条件
$isLoggedIn = $false
if (-not $isLoggedIn) {
Write-Output "ログインが必要です"
}
型演算子
オブジェクトの型を判定したり、型変換を行う演算子です。
演算子 | 説明 | 例 |
---|---|---|
-is | 指定した型かどうかを判定 | $a -is [int] |
-isnot | 指定した型でないかを判定 | $a -isnot [string] |
-as | 型変換(失敗時はnull) | "123" -as [int] |
実用例
# 型の判定
$value = 42
if ($value -is [int]) {
Write-Output "整数です"
}
# 型変換
$stringNumber = "123"
$number = $stringNumber -as [int]
if ($number -ne $null) {
Write-Output "変換成功: $number"
} else {
Write-Output "変換失敗"
}
# 配列の型チェック
$items = @(1, 2, 3)
if ($items -is [array]) {
Write-Output "配列の要素数: $($items.Length)"
}
文字列・パターンマッチング演算子

文字列の検索やパターンマッチングを行う演算子です。
ワイルドカード検索
演算子 | 説明 | 例 |
---|---|---|
-like | ワイルドカードによる一致 | "PowerShell" -like "Power*" |
-notlike | ワイルドカードによる不一致 | "test" -notlike "prod*" |
正規表現
演算子 | 説明 | 例 |
---|---|---|
-match | 正規表現による一致 | "test123" -match "\d+" |
-notmatch | 正規表現による不一致 | "abc" -notmatch "\d+" |
配列内検索
演算子 | 説明 | 例 |
---|---|---|
-contains | 配列に要素が含まれる | @(1,2,3) -contains 2 |
-notcontains | 配列に要素が含まれない | @(1,2,3) -notcontains 4 |
-in | 要素が配列に含まれる | 2 -in @(1,2,3) |
-notin | 要素が配列に含まれない | 4 -notin @(1,2,3) |
実用例
# ファイル名のパターンマッチ
$fileName = "report_2024.xlsx"
if ($fileName -like "*report*") {
Write-Output "レポートファイルです"
}
# 正規表現でのバリデーション
$email = "user@example.com"
if ($email -match "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$") {
Write-Output "有効なメールアドレスです"
}
# 配列内検索
$allowedExtensions = @(".txt", ".log", ".csv")
$fileExtension = ".txt"
if ($fileExtension -in $allowedExtensions) {
Write-Output "許可されたファイル形式です"
}
配列・範囲演算子
配列の操作や数値範囲の生成を行う演算子です。
演算子 | 説明 | 例 |
---|---|---|
.. | 数値範囲の生成 | 1..5 → 1, 2, 3, 4, 5 |
@() | 配列の明示的作成 | @("a", "b", "c") |
, | 配列要素の区切り | $a = 1, 2, 3 |
実用例
# 連続する数値の生成
$numbers = 1..10
Write-Output $numbers # 1から10まで
# 逆順の範囲
$countdown = 10..1
Write-Output $countdown # 10から1まで
# 配列の明示的作成
$singleItem = @("only one") # 単一要素でも配列として扱われる
$emptyArray = @() # 空の配列
# ループでの使用
foreach ($i in 1..5) {
Write-Output "処理 $i"
}
特殊演算子

PowerShell特有の機能を提供する演算子です。
パイプライン演算子
演算子 | 説明 | 例 |
---|---|---|
| | 出力を次のコマンドに渡す | Get-Process | Where-Object { $_.CPU -gt 10 } |
ショートカット演算子
演算子 | 説明 | 完全形 |
---|---|---|
? | Where-Objectの省略形 | Where-Object |
% | ForEach-Objectの省略形 | ForEach-Object |
null処理演算子(PowerShell 7以降)
演算子 | 説明 | 例 |
---|---|---|
?? | null合体演算子 | $name ?? "未設定" |
??= | null条件代入 | $name ??= "デフォルト値" |
その他
演算子 | 説明 | 例 |
---|---|---|
:: | 静的メソッド・プロパティ | [Math]::PI |
$() | サブ式演算子 | "合計: $(1 + 2) 個" |
@() | 配列サブ式演算子 | @(Get-ChildItem) |
実用例
# パイプラインの使用
Get-Process |
Where-Object { $_.WorkingSet -gt 100MB } |
Sort-Object WorkingSet -Descending |
Select-Object -First 5
# ショートカット演算子
$numbers = 1..10
$evenNumbers = $numbers | ? { $_ % 2 -eq 0 }
$squares = $numbers | % { $_ * $_ }
# null合体演算子(PowerShell 7以降)
$userName = $null
$displayName = $userName ?? "ゲストユーザー"
Write-Output $displayName # 出力: ゲストユーザー
# 静的メソッドの呼び出し
$pi = [Math]::PI
$sqrt = [Math]::Sqrt(16)
$now = [DateTime]::Now
# サブ式演算子
$count = 5
Write-Output "処理対象: $(Get-ChildItem | Measure-Object | Select-Object -ExpandProperty Count) ファイル"
演算子の優先順位
演算子には優先順位があります。括弧を使って明示的に優先順位を指定することを推奨します。
高優先度から低優先度:
()
括弧::
静的演算子[]
インデックス・型キャスト-not
,!
論理否定*
,/
,%
乗除算・剰余+
,-
加減算-eq
,-ne
,-gt
,-lt
,-ge
,-le
比較演算子-like
,-match
,-contains
パターンマッチ-and
論理積-or
,-xor
論理和・排他的論理和
例
# 明示的な括弧の使用を推奨
$result = ($a + $b) * $c # 分かりやすい
$result = $a + $b * $c # 紛らわしい($b * $cが先に計算される)
# 複雑な条件では括弧を使用
if (($age -ge 18 -and $hasLicense) -or $isEmergency) {
# 処理
}
よくある間違いと注意点

他言語の演算子との混同
# 間違い(JavaScriptやC#の記法)
if ($a == 10) { }
if ($a != 10) { }
# 正しい(PowerShellの記法)
if ($a -eq 10) { }
if ($a -ne 10) { }
代入と比較の混同
# 間違い(代入になってしまう)
if ($a = 10) { }
# 正しい(比較)
if ($a -eq 10) { }
大文字小文字の扱い
# 大文字小文字を区別する場合は明示的に指定
$name = "PowerShell"
# デフォルトでは大文字小文字を無視
if ($name -eq "powershell") { } # true
# 明示的に区別する場合
if ($name -ceq "powershell") { } # false
if ($name -ieq "powershell") { } # true
配列との比較
# 配列に対する比較は要素をフィルタリングする
$numbers = @(1, 2, 3, 4, 5)
$result = $numbers -gt 3 # 結果: 4, 5
# 配列内の存在確認は -contains を使用
if ($numbers -contains 3) {
Write-Output "3が含まれています"
}
実践的な使用例
ファイル処理での演算子活用
# ファイルの種類別処理
Get-ChildItem -Path "C:\Data" | ForEach-Object {
if ($_.Extension -ieq ".txt" -and $_.Length -gt 0) {
Write-Output "テキストファイル: $($_.Name)"
} elseif ($_.Extension -imatch "^\.(jpg|png|gif)$") {
Write-Output "画像ファイル: $($_.Name)"
} elseif ($_.LastWriteTime -gt (Get-Date).AddDays(-7)) {
Write-Output "最近更新されたファイル: $($_.Name)"
}
}
システム情報の判定
# システム情報による条件分岐
$os = Get-CimInstance -ClassName Win32_OperatingSystem
$cpu = Get-CimInstance -ClassName Win32_Processor
if ($os.Caption -like "*Windows 10*" -or $os.Caption -like "*Windows 11*") {
Write-Output "モダンなWindowsです"
if ($cpu.NumberOfCores -ge 4 -and [int]($os.TotalVisibleMemorySize / 1MB) -ge 8) {
Write-Output "高性能システムです"
}
}
データ処理での演算子チェーン
# CSVデータの処理例
$data = Import-Csv "sales.csv"
$summary = $data |
Where-Object { $_.Amount -gt 1000 -and $_.Date -gt (Get-Date).AddMonths(-1) } |
ForEach-Object {
[PSCustomObject]@{
Customer = $_.Customer
Amount = [int]$_.Amount
Category = if ($_.Amount -gt 5000) { "High" } elseif ($_.Amount -gt 2000) { "Medium" } else { "Low" }
}
} |
Group-Object Category |
ForEach-Object {
[PSCustomObject]@{
Category = $_.Name
Count = $_.Count
TotalAmount = ($_.Group | Measure-Object Amount -Sum).Sum
}
}
$summary | Format-Table -AutoSize
まとめ
PowerShellの演算子は、最初は独特に感じるかもしれませんが、以下のような利点があります:
PowerShell演算子の特徴:
- 直感的な命名:英語の略語を使った分かりやすい記法
- 一貫性:すべての演算子がハイフン付きキーワード形式
- 柔軟性:大文字小文字の区別を明示的に指定可能
- 強力な機能:配列操作や型処理が簡潔に記述できる
積極的に試してみて覚えてみてください。
コメント