WindowsPowerShell

PowerShellのパイプラインとオブジェクト操作【Where-Object・Select-Object・Sort-Object完全ガイド】

WindowsPowerShell
記事内に広告が含まれています。

PowerShellの最大の特徴はパイプライン(|)でオブジェクトを渡せることです。Where-Object・Select-Object・Sort-Objectを組み合わせると、複雑なデータ処理を1行で書けます。

パイプラインの基本

# プロセス一覧からCPU使用率トップ5を表示
Get-Process |
    Sort-Object CPU -Descending |
    Select-Object -First 5 |
    Format-Table Name, CPU, WorkingSet -AutoSize

# 停止中のサービスを一覧表示
Get-Service |
    Where-Object { $_.Status -eq "Stopped" } |
    Select-Object Name, DisplayName

Where-Object(フィルタリング)

# 省略形(?)
Get-Process | Where-Object { $_.WorkingSet -gt 100MB }
Get-Process | ? { $_.Name -like "chrome*" }

# スクリプトブロックなしの簡略記法(PS3以降)
Get-Service | Where-Object Status -eq Running
Get-ChildItem | Where-Object Extension -eq ".log"

Select-Object(プロパティ選択・計算列)

# 特定のプロパティだけ選択
Get-Process | Select-Object Name, Id, CPU

# 先頭・末尾N件
Get-Process | Select-Object -First 10
Get-Process | Select-Object -Last 5

# 計算列(カスタムプロパティ)
Get-ChildItem C:\Windows |
    Select-Object Name, @{Name="SizeMB"; Expression={[math]::Round($_.Length/1MB,2)}} |
    Sort-Object SizeMB -Descending

Group-Object・Measure-Object(集計)

# 拡張子ごとにグループ化してファイル数を集計
Get-ChildItem C:\work -Recurse |
    Group-Object Extension |
    Sort-Object Count -Descending |
    Select-Object Name, Count

# ファイルサイズの合計・平均・最大
Get-ChildItem C:\logs -Filter *.log |
    Measure-Object Length -Sum -Average -Maximum |
    Select-Object Sum, Average, Maximum

PowerShellのパイプラインに慣れると、複数のコマンドを繋げて「フィルタ→ソート→集計→整形」という処理を1つの流れで書けるようになります。最初は1コマンドずつ確認しながら繋げていくのがコツです。

hobbyshift管理人

まとめ

  • パイプライン(|)でコマンドの出力オブジェクトを次のコマンドに渡せる
  • Where-Object(?)でフィルタ、Select-Objectでプロパティ選択・計算列を作成
  • Sort-Objectでソート、-Descendingで降順
  • Group-ObjectとMeasure-Objectで集計・統計処理ができる

コメント

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