【完全保存版】PowerShell演算子一覧ガイド|種類別の使い方を実例で徹底解説

Windows

PowerShellを使い始めると、こんな疑問に直面することがあります:

「よくある==が使えないの?」
「演算子の種類が多すぎて覚えられない…」
「どの演算子をいつ使えばいいかわからない」

PowerShellの演算子は独特な記法を使いますが、体系的に理解すれば非常に強力で使いやすいツールです。

この記事では、PowerShellで使用できる演算子を種類別に整理し、実例を交えて詳しく解説します。

スポンサーリンク

PowerShell演算子の基本

PowerShellの演算子は、以下のカテゴリに分類されます:

種類主な用途特徴
算術演算子数値計算他言語と似ている
代入演算子変数への値の設定複合代入演算子が豊富
比較演算子値の比較・判定ハイフン付きキーワード形式
論理演算子条件の組み合わせ英語的な表現
型演算子型判定・変換.NET型システムと連携
文字列演算子文字列操作・パターンマッチ大文字小文字の区別オプション
配列・範囲演算子配列操作・範囲生成直感的な記法
特殊演算子パイプライン・null処理などPowerShell特有の機能

算術演算子

基本的な数学計算を行う演算子です。他のプログラミング言語とほぼ同じです。

演算子説明結果
+加算5 + 38
-減算10 - 46
*乗算6 * 742
/除算15 / 35
%剰余(余り)17 % 52

実用例

# 基本的な計算
$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)

注意: 各演算子には大文字小文字を区別する版(-cプレフィックス)と無視する版(-iプレフィックス)があります。

実用例

# ファイル名のパターンマッチ
$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) ファイル"

演算子の優先順位

演算子には優先順位があります。括弧を使って明示的に優先順位を指定することを推奨します。

高優先度から低優先度:

  1. () 括弧
  2. :: 静的演算子
  3. [] インデックス・型キャスト
  4. -not, ! 論理否定
  5. *, /, % 乗除算・剰余
  6. +, - 加減算
  7. -eq, -ne, -gt, -lt, -ge, -le 比較演算子
  8. -like, -match, -contains パターンマッチ
  9. -and 論理積
  10. -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演算子の特徴:

  • 直感的な命名:英語の略語を使った分かりやすい記法
  • 一貫性:すべての演算子がハイフン付きキーワード形式
  • 柔軟性:大文字小文字の区別を明示的に指定可能
  • 強力な機能:配列操作や型処理が簡潔に記述できる

積極的に試してみて覚えてみてください。

コメント

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