パイプラインで遊ぶ
コマンドとコマンドをパイプライン(|)でつなぐことで、「最初のコマンドの実行結果を次のコマンドに渡してさらに処理させる」ことができます。
以下はパイプラインの単純なサンプル。「psで取得したサービス一覧をftでテーブル形式にフォーマットして表示」します。
PS C:\> ps | ft name, vm, path Name VM Path ---- -- ---- alg 37634048 C:\WINDOWS\System32\alg.exe AppleMobileDeviceService 19128320 C:\Program Files\Common Files\Apple\... ...
コマンド間では「オブジェクト」が受け渡しされます。上の例だと、「System.Diagnostics.Process」の配列が渡されることになります。
PS C:\> ps | gm TypeName: System.Diagnostics.Process Name MemberType Definition ---- ---------- ---------- Handles AliasProperty Handles = Handlecount Name AliasProperty Name = ProcessName NPM AliasProperty NPM = NonpagedSystemMemorySize ...
foreach で渡されたオブジェクトを取り出して順に操作できます。取り出したオブジェクトは「$_」で参照できます。
PS C:\> ps | foreach { echo $_.Name } alg AppleMobileDeviceService ...
whereで絞り込み。以下は、「VirtualMemorySizeが100MB以上のプロセスの一覧を表示」する例です。
PS C:\> ps | where { $_.VM -gt 100*1024*1024 } Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 107 3 3120 2256 411 0.61 1412 bash 124 5 21852 3040 1083 192.92 1516 BunBackup 112 5 2896 1140 411 0.58 1204 cygterm 1007 27 28216 29184 139 170.47 3292 explorer ...
さらにソートしてみます。
PS C:\> ps | where { $_.VM -gt 100*1024*1024 } | sort VM -descending Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 124 5 21852 3040 1083 192.92 1516 BunBackup 112 5 2896 1140 411 0.58 1204 cygterm 107 3 3120 2256 411 0.61 1412 bash ...