【初心者向け】PowerShellのWhere-Object徹底解説|条件フィルタリングの基本と実践例

Windows

PowerShellでデータを取得したとき、「特定の条件に一致するものだけを取り出したい!」という場面はよくあります。

たとえば、「CPU使用率が高いプロセスだけ見たい」「特定のサービスだけ抽出したい」など――。

そんなときに使うのが、PowerShellのフィルター機能 Where-Object コマンドレットです。

この記事では、Where-Objectの基本構文から記号の意味、使いやすいエイリアス、よくある応用例まで、初心者にもわかりやすく解説します。

スポンサーリンク

Where-Objectとは?できることと役割

Where-Objectは、パイプラインで渡されたオブジェクトを条件付きでフィルタリングするためのコマンドレットです。

取得したデータの中から、特定のプロパティや値に一致する項目だけを抽出できます。

代表的な用途:

  • 実行中のプロセスからCPU使用率が高いものだけ表示
  • サービスの中から「停止中」のものだけ抽出
  • ファイル一覧から特定拡張子のファイルだけ取得

基本構文と使用例

基本構文:

コマンド | Where-Object { 条件式 }

例:CPU使用率が10%以上のプロセスを表示

Get-Process | Where-Object { $_.CPU -gt 10 }

ここでの $_パイプで渡された各オブジェクト(レコード)を表す変数です。

よく使う比較演算子一覧

演算子意味
-eq等しい$_.Name -eq "chrome"
-ne等しくない$_.Status -ne "Running"
-gtより大きい$_.CPU -gt 10
-ltより小さい$_.Handles -lt 500
-like部分一致$_.Name -like "*notepad*"
-match正規表現一致$_.Name -match "^W"

エイリアス ? の使い方

PowerShellでは、Where-Objectには短縮形(エイリアス)として「 ? 」が使えます。

例:動作中サービスだけ取得

Get-Service | ? { $_.Status -eq "Running" }

エイリアスはスクリプト内では可読性のためにWhere-Objectを使う方が推奨されますが、コマンドラインでの素早い操作には非常に便利です。

実践:プロセス・サービス・ファイルでの活用例

プロセスのCPU使用率が高いものを表示

Get-Process | Where-Object { $_.CPU -gt 50 }

停止しているサービスを取得

Get-Service | Where-Object { $_.Status -eq "Stopped" }

特定拡張子(例:.log)のファイルを探す

Get-ChildItem -Path "C:\Logs" | Where-Object { $_.Extension -eq ".log" }

複数条件でのフィルタリング方法

条件は -and-or を使って複数指定できます。

例:CPU使用率が10以上、かつ名前が”powershell”のプロセス

Get-Process | Where-Object { $_.CPU -ge 10 -and $_.Name -eq "powershell" }

よくあるエラーと注意点

トラブル原因と対処法
$_ が認識されないWhere-Objectの中で使う必要があります。中カッコ {} を忘れていないか確認しましょう。
データが返ってこない条件式が厳しすぎる、またはプロパティ名が間違っている場合があります。Get-Memberで構造確認をおすすめします。
-likeで思った通りにマッチしない* ワイルドカードを忘れていないか確認しましょう(例:-like "*test*"

まとめ

Where-Objectは、PowerShellの中でも非常に強力な「絞り込み・条件分岐」のためのコマンドレットです。

これをマスターすれば、大量のデータを的確に取り出し、処理効率を大幅にアップさせることができます。

ポイントまとめ

  • Where-Object { $_.プロパティ 条件 } で絞り込み
  • -eq, -like, -gt などの演算子を覚えると便利
  • ? はエイリアスとして短縮形で使える
  • スクリプト内では複数条件で柔軟に処理できる

PowerShellでのデータ処理をもっと自在に、スマートにする第一歩として、Where-Objectをぜひマスターしてみてください!

コメント

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