PowerShell パイプラインとフィルタリング

PowerShell の最も強力な機能の1つは「パイプライン」の仕組みです。

パイプラインを使うと、ブロックを積むように複数のコマンドを組み合わせられ、各ステップでオブジェクトを処理して渡します。これによりスクリプトがより簡潔になるだけでなく、データ処理の柔軟性と効率も大幅に向上します。

このセクションではパイプラインの|基本原則、フィルタリングの2つの方法、オブジェクトのプロパティ抽出、およびよく使う組み合わせテクニックを紹介し、より強力でスマートなコマンドライン操作を書くのに役立ちます。


一、パイプラインとは?

PowerShell では、パイプライン記号|(縦線)は、前のコマンドの出力を次のコマンドへの入力として「渡す」ことを表します。

従来のコマンドラインのテキストストリームとは異なり、PowerShell パイプラインで渡されるのはオブジェクト、これにより操作がより正確で強力になります。

例:実行中のサービスを一覧表示して並べ替える

Get-Service | Where-Object {$_.Status -eq "Running"} | Sort-Object DisplayName

説明:

  1. Get-Serviceすべてのサービスオブジェクトを取得する;
  2. Where-Object状態が Running のサービスを抽出する;
  3. Sort-Objectサービス名に基づいて並べ替えます。

二、オブジェクトのフィルタリング:Where-Object

基本構文

Where-Object { 条件表达式 }

に{}内部では、$_現在のパイプライン内の各オブジェクトを表します。

例 1:メモリ使用量が 500MB を超えるプロセスをフィルタリングする

Get-Process | Where-Object { $_.WorkingSet -gt 500MB }

例 2:サービス名が "Win" で始まるサービスをフィルタリングする

Get-Service | Where-Object { $_.Name -like "Win*" }

三、プロパティの抽出:Select-Object

Select-Objectオブジェクトから必要なフィールドを抽出するために使用され、出力の簡潔化、ファイルへのリダイレクト、レポートの作成によく使われます。

例:すべてのサービスの名前と状態を一覧表示する

Get-Service | Select-Object Name, Status

さらにフィールドの名前を変更することもできます:

Get-Service | Select-Object @{Name="服务名"; Expression={$_.DisplayName}}, Status

四、データの並べ替え:Sort-Object

Sort-Object特定のプロパティに基づいてオブジェクトを並べ替えるために使用されます。

例 1:メモリ使用量の降順でプロセスを並べ替える

Get-Process | Sort-Object WorkingSet -Descending | Select-Object Name, WorkingSet -First 5

五、出力と書式設定:Format-Table、Out-File など

例:表形式でサービス情報を表示する

Get-Service | Format-Table -Property Name, Status, DisplayName

ファイルへの出力:

Get-Service | Where-Object {$_.Status -eq "Running"} | 
    Select-Object Name, DisplayName |
    Out-File -FilePath "C:\RunningServices.txt"

六、よく使う使い方の組み合わせ(実践)

1. CPU を使用しているすべてのプロセスを表示する(CPU 使用量で並べ替え)

Get-Process | Where-Object { $_.CPU -gt 0 } | Sort-Object CPU -Descending

2. 名前に "Time" を含むすべてのサービスを検索する

Get-Service | Where-Object { $_.DisplayName -like "*Time*" }

3. ディスク情報をエクスポートする

Get-CimInstance Win32_LogicalDisk |
    Select-Object DeviceID, VolumeName, Size, FreeSpace |
    Export-Csv -Path "C:\diskinfo.csv" -NoTypeInformation

七、Where-Object の省略形(PowerShell 3.0+)

PowerShell 3.0 以降のバージョンでは、省略構文をサポートしています:

Where-Object Name -like "*Win*"

同等です:

Where-Object { $_.Name -like "*Win*" }

初心者はまず標準の書き方に慣れ、後で省略形を使って効率を上げることをお勧めします。


八、よく使うパイプライン操作コマンド一覧

コマンド 機能の説明
Where-Object オブジェクトを条件でフィルタリングする
Select-Object 指定したプロパティを抽出する
Sort-Object プロパティで並べ替える
Format-Table 出力を表形式に整形する
Out-File 出力をテキストファイルに書き込む
Export-Csv データを CSV ファイルにエクスポートする

九、まとめ

  • PowerShell パイプラインは、オブジェクトの受け渡しに基づいています、従来のテキストパイプラインよりも強力です
  • Where-Objectデータフィルタリングの中核的なツールです
  • Select-ObjectとSort-Objectデータを柔軟に抽出、並べ替え、整理できます
  • 複数のコマンドを組み合わせることで複雑なデータ処理タスクを完了でき、システム自動化の基盤です。

十、練習問題

タスク 1:「W」で始まるすべてのサービスをフィルタリングし、名前で並べ替える

Get-Service | Where-Object { $_.Name -like "W*" } | Sort-Object Name

タスク 2:メモリ使用量が最も高い上位 10 個のプロセスを一覧表示する

Get-Process | Sort-Object WorkingSet -Descending | Select-Object Name, WorkingSet -First 10

タスク 3:このマシンのすべての IPv4 アドレスをファイルにエクスポートする

Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress | Out-File -FilePath "C:\ip_list.txt"
その他の拡張