PowerShellの中身

UNIXユーザーが、PowerShellを使う時には、PowerShellUNIXの発想を取り入れた別のユーザーインターフェイスとツール群であることを覚えておく必要がある。たとえば grep に対応するコマンドレットが select-string であるので、「プロセス番号が4のプロセス名を調べる」ことを使用とするとこんな風に入力するんじゃなかろーか*1

 PS C:\> Get-Process | select-string 4
 PS C:\> 

何もでてこない。この理由は、オブジェクトの配列を select-string して引っかけようとするとき、プロセス名しか引っかからないから*2。だから、プロセス名を引っかけたいなら OK 。

PS C:> Get-Process | select-string xy
System.Diagnostics.Process (McProxy)
System.Diagnostics.Process (xyzzy)

プロセスを表す上のオブジェクトからidを使ってフィルタリングするには

 PS> Get-Process -id 4

とするか、

 PS>
PS C:\> Get-Process | where-object {$_.id -eq 4 }
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
   1521       0        0        272     2    14.14      4 System

とすればいい。後者の方が、フィルタ、という発想からはマッチにしてるように見えるやね。

*1:てか、今そう入力した

*2:おそらくパイプで流れたオブジェクトをtoStringしたものに対してgrepされるのじゃないかな...