PowerShellを使っていると、コマンドレットやパイプラインから大量のオブジェクトを受け取ることがよくあります。
その中から特定の条件を満たすものだけを取り出したいときに便利なのが、Where-Object
です。
本記事では、Where-Object
の使い方の基本をまとめます。
Contents
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スクリプトの操作性・表現力が一気に広がります。