経緯
同僚から「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-Process
の StartTime
を和暦に変換して取り出す
$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