スポンサーリンク

【PowerShell】Where-Objectコマンドレットによるフィルタリング

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

PowerShellを使っていると、コマンドレットやパイプラインから大量のオブジェクトを受け取ることがよくあります。

その中から特定の条件を満たすものだけを取り出したいときに便利なのが、Where-Objectです。

本記事では、Where-Objectの使い方の基本をまとめます。

スポンサーリンク

Where-Objectとは?

Where-Objectは、オブジェクトの配列から特定の条件を満たすものだけをフィルタリングするためのPowerShell標準コマンドレットです。

簡単に言うと、「この条件に合うやつだけちょうだい!」とPowerShellにお願いする道具です。

スポンサーリンク

Where-Objectの書き方

基本的な構文

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

以下の例では、現在動いているプロセスの中から CPU使用時間が100秒を超えるプロセス を抽出します。

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

$_ は、パイプラインで渡された1つ1つのオブジェクトを指します。

  • $_ は「今見ているオブジェクト」
  • プロパティ名.で指定
  • 比較演算子(-eq, -gt, -ltなど)で条件を設定

比較演算子

以下のような比較演算子を利用できます。

演算子意味
-eq等しい
-ne等しくない
-gtより大きい
-ge以上
-ltより小さい
-le以下
-likeパターン一致(ワイルドカード*が使える)
-match正規表現一致

省略記法(パラメータ式)も使える!

PowerShell 3.0以降では、もう少し短く書ける便利な形式が追加されました。

パラメータ式の例

Get-Process | Where-Object Name -eq "chrome"
  • 最初にプロパティ名
  • その後に比較演算子
  • 最後に比較対象の値

シンプルで読みやすいので、条件が単純なときにはおすすめです。

使用例

特定の拡張子のファイルを一覧から抽出

Get-ChildItem "C:\Users\UserName\Documents" | Where-Object { $_.Extension -eq ".txt" }

→ドキュメントフォルダから.txtファイルだけを抽出します。

状態が「Running」のサービスを抽出

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

→ 現在動作中のサービスだけリストアップできます。

CPU使用率が高いプロセスだけ警告する

$highCpuProcs = Get-Process | Where-Object { $_.CPU -gt 200 }
if ($highCpuProcs) {
    Write-Output "CPU使用率が高いプロセスがあります!"
    $highCpuProcs
}

→ システム監視にも応用できます。

注意点

ポイント説明
$_の付け忘れブロック内でオブジェクトを指定しないとエラーになります。
文字列比較の大文字・小文字基本は大文字小文字を区別しませんが、厳密比較も可能です(例:-ceq)。
配列の要素数ゼロ時の挙動結果が0件でもエラーにはならず、単に何も表示されないだけです。

まとめ

  • Where-Objectはフィルタリングに便利
  • 基本構文は { 条件式 }
  • 短縮記法(パラメータ式)も覚えておくとさらに楽
  • 実践例をたくさん試すとすぐ慣れる

条件でオブジェクトを絞り込むと、PowerShellスクリプトの操作性・表現力が一気に広がります。

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