Where-Object コマンドレットの使用

返されるデータのフィルタ処理

Where-Object コマンドレットを使用すると、他のコマンドレットから返されたデータをフィルタ処理することができます。たとえば、既定で Get-Process は、コンピュータで実行されているすべてのプロセスについて情報を返します。ただし、200 ハンドルを超えて使用するプロセスにのみ興味があるとします (でも、この事例に興味を持つ理由は私たちにはわかりません)。プロセスのサブセットのみを返すには、Get-Process を呼び出し、結果を Where-Object 経由で返すことです。

Get-Process | Where-Object {$_.handles -gt 200}

構文の注意には気をつけてください。開始するには、where 句を波かっこで囲み、さらに既定オブジェクトを表すために $_ の表記方法を使用します (つまり、オブジェクトはパイプライン上で送信されます)。最後に、もう一つ気をつけたい点は、より大きいことを示す比較演算子を示すために比較演算子が使用されているということです。この場合、> とは反対に -gt です。Windows PowerShell は標準的な数学的な比較操作を使用しませんが、次のような演算子は使用します。

  • -lt -- より小さい

  • -le -- 以下

  • -gt -- より大きい

  • -ge -- 以上

  • -eq -- 等しい

  • -ne -- 等しくない

  • -like - Like は、ワイルドカードを使用してパターン マッチングを実行します。

言い換えると、ハンドルが 200 以上のプロセスを探している場合、次のコマンドを使用します。

Get-Process | Where-Object {$_.handles -ge 200}

また、-and パラメータと -or パラメータを使用して、有限的な対象のデータセットを作成することもできます。たとえば、200 ハンドルを超えて使用している svchost プロセスのすべてのインスタンスを返すとします。必要な操作は、次のように where 句に両方の基準を含め、- を使用して 2 つを区切ることです。

Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}

同様に、200 ハンドルを超えて使用しているか、svchost という名前を持っているすべてのプロセス一覧を表示するとします (言い換えると、200 ハンドルを超えて使用するすべてのプロセスだけでなく、使用しているハンドル数に関係なくすべての svchost プロセスも)。この場合、- またはパラメータを使用して、where 句の 2 つの部分をバインドします。

Get-Process | Where-Object {$_.handles -gt 200 -or $_.name -eq "svchost"}

もう 1 つ例を挙げます。次の例は、(Get-ChildItem コマンドレットを使用して) フォルダ C:\Scripts にあり、サイズが 100,000 バイトを超えるファイルのみを表示します。

Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}

-like 演算子を忘れずに付加してください。このコマンドは、ファイル名に文字列 "test" を含む C:\Scripts のすべてのファイルが返されます。2 つのアスタリスクはワイルドカード文字として使用されています。

Get-ChildItem c:\scripts | Where-Object {$_.name -like "*test*"}

実行結果の一例を次に示します。

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          5/6/2006  10:24 PM      34198 test.csv
-a---         5/19/2006   9:11 AM       5918 test.htm
-a---         5/19/2006   8:16 AM      34226 test.log
-a---         5/19/2006   1:20 PM         65 test.ps1
-a---         5/20/2006   9:52 AM        150 test.psc1
-a---         5/20/2006   9:52 AM        150 test.psc1e.psc1
-a---         5/19/2006   1:27 PM        565 test.txt
-a---         4/17/2006   6:41 PM      24064 test.txt.doc
-a---         5/19/2006   1:45 PM       1971 test.vbs
-a---         5/17/2006   1:41 PM       9248 test.xls
-a---         5/19/2006   1:20 PM     628234 Test.xml
-a---          4/6/2006  10:26 PM        205 test_NODUPL.txt
Where-Object のエイリアス
  • where

関連リンク