PowerShellを使っていると、たくさんの情報の中から「特定の条件に合うものだけを抽出したい」という場面がよくあります。たとえば、特定の拡張子を持つファイルだけを取り出したり、実行中のプロセスからCPU使用率の高いものを見つけたりといった作業です。こうした絞り込みに活躍するのが Where-Object
コマンドです。この記事では、Where-Object
の基本的な使い方から、実用的な応用例まで、わかりやすく解説していきます。PowerShellをより効率的に使いこなすための第一歩として、ぜひ参考にしてください。
Where-Object
は、PowerShellでオブジェクトの配列から特定の条件に一致する要素だけを抽出するためのコマンドレットです。
<コマンド出力> | Where-Object { $_.プロパティ名 -演算子 値 }
ここでのポイントは、$_
という特殊な変数です。これは、パイプで流れてきたオブジェクトを1つずつ受け取り、その中のプロパティにアクセスするために使います。
Get-ChildItem | Where-Object { $_.Length -ge 1MB }
この例では、カレントディレクトリ内のファイルのうち、サイズが1MB以上のものだけを取得しています。
Where-Object
では、さまざまな条件式を使ってデータをフィルタリングできます。よく使う比較演算子を以下にまとめます。
演算子 | 意味 |
---|---|
-eq | 等しい |
-ne | 等しくない |
-gt | より大きい |
-lt | より小さい |
-ge | 以上 |
-le | 以下 |
-like | パターン一致 |
-match | 正規表現一致 |
Get-ChildItem | Where-Object { $_.Extension -eq ".txt" }
Get-ChildItem | Where-Object { $_.Name -like "*report*" }
PowerShell 3.0以降では、Where-Object
に省略記法が追加され、よりシンプルに記述できるようになりました。
Where-Object { $_.Name -like "*log*" }
Where-Object Name -like "*log*"
この省略記法は、短くて読みやすいという利点がありますが、複雑な条件には対応できない場合があるため、使い分けが大切です。
Where-Object
では -and
や -or
を使って複数条件を組み合わせることもできます。
Get-ChildItem | Where-Object { $_.Length -ge 1MB -and $_.Extension -eq ".log" }
Get-ChildItem | Where-Object { $_.Extension -eq ".txt" -or $_.Extension -eq ".csv" }
PowerShellでは、Get-Process
コマンドと組み合わせることで、システム情報を柔軟に取得できます。
Get-Process | Where-Object { $_.CPU -ge 10 }
Get-Process | Where-Object { $_.Name -like "*chrome*" }
オブジェクトのプロパティがさらにオブジェクトを含んでいる場合は、ドット記法を使ってアクセスします。
Get-ChildItem | Where-Object { $_.CreationTime -ge "2024-01-01" }
関数やループと組み合わせて、より柔軟なデータ処理も可能です。
function Get-LargeFiles {
param(
[string]$Path = "."
)
Get-ChildItem -Path $Path -Recurse |
Where-Object { $_.Length -ge 5MB }
}
このように Where-Object
を関数内で使えば、再利用しやすくなります。
Where-Object
と似た名前の Select-Object
がありますが、役割が異なります。
Where-Object
:条件でフィルターするSelect-Object
:表示するプロパティを指定するGet-Process |
Where-Object { $_.CPU -gt 5 } |
Select-Object Name, CPU
これは「CPU使用率が5以上のプロセスの名前とCPU使用量だけを表示する」という使い方です。
オブジェクトに指定したプロパティが存在しないとエラーになります。まずは Get-Member
で確認しましょう。
Get-Process | Get-Member
スクリプトブロック内で $_
を使い忘れると正しく動作しません。
Where-Object
は、PowerShellで条件に合ったデータを抽出するための強力なツールです。基本的な構文さえマスターすれば、日常的なファイル操作から、システム監視、データ整形まで、あらゆる場面で役立ちます。
特にパイプライン処理と組み合わせることで、直感的かつ効率的なスクリプトを書くことができます。最初は $_
の使い方や演算子に戸惑うかもしれませんが、いくつか試してみるうちに、自然と使いこなせるようになります。ぜひこの記事を参考に、実際に手を動かしてみてください。