Select-Object コマンドレットを復習

経緯

同僚から「Select-Object で使う Expression って知ってる?便利だったよ」と教えてもらいました。なんとなく使っていた Select-Object でしたので復習してみたメモです。

Select-Object とは

オブジェクトのプロパティを取り出したオブジェクトを出力するコマンドレット。

使い方

Get-Process コマンドレットの出力を操作することで、Select-Object 説明する。
ちなみに、Get-Process コマンドレットを引数無しで実行すると次の通りになる。

プロパティの値を選択する

Get-Process の結果から ProcessName , Description , StartTime を取り出す

Get-Process | Select-Object -Property ProcessName, Description, StartTime

プロパティの値を展開する

プロセス名を Chrome に絞り、利用しているモジュールを重複を省いて表示する

Get-Process Chrome | Select-Object -Property ProcessName, Modules -Unique

Modules はオブジェクトになっているので上図のようになるが、それを展開するために -ExpandProperty を利用する

Get-Process Chrome | Select-Object -Property ProcessName -ExpandProperty Modules -Unique

出力件数を指定する

Get-Process の結果から先頭の 5 件を取り出す

Get-Process | Select-Object -Property ProcessName, Description, StartTime -First 5

Get-Process の結果から最後の 5 件を取り出す

Get-Process | Select-Object -Property ProcessName, Description, StartTime -Last 5

加工して出力する

Get-ProcessStartTime を和暦に変換して取り出す

$CultureInfo = New-Object CultureInfo("ja-jp", $true)
$CultureInfo.DateTimeFormat.Calendar = New-Object System.Globalization.JapaneseCalendar
Get-Process | Select-Object -Property ProcessName, Description, @{Name = "wareki"; Expression = {$_.StartTime.ToString("gy年M月d日", $CultureInfo)}}

Get-Process の結果にから Modules オブジェクトに含まれる数順で並べる

Get-Process | Select-Object -Property ProcessName, Description, @{Name="ModulesCount"; Expression={$_.Modules.Count}} | Sort-Object -Property ModulesCount -Descending

参考