Select-Objectで取得するオブジェクトの拡張

1. selectでdatetimeオブジェクトをプロパティとして選択する

 PS tmp> dir *.txt | select Name, LastWriteTime
 
 Name   LastWriteTime
 ----   -------------
 1.txt  2018/05/15 3:40:31
 2.txt  2018/05/15 3:40:24

2. datetimeオブジェクトを無名ハッシュテーブルに変換して新しいプロパティとして選択する

 PS tmp> dir *.txt | select Name, LastWriteTime, @{Name = "Youbi"; Expression = {$_.LastWriteTime.DayOfWeek}}
 
 Name   LastWriteTime        Youbi
 ----   -------------        -----
 1.txt  2018/05/15 3:40:31 Tuesday
 2.txt  2018/05/15 3:40:24 Tuesday

@{}で無名ハッシュテーブルを作り、その中でNameExpressionを定義し、$_でLastWriteTime(datetimeオブジェクト)を参照する

3. 無名ハッシュテーブルは記述を短縮できる

 dir *.txt | select Name, LastWriteTime, @{N = "Youbi"; E = {$_.LastWriteTime.DayOfWeek}}
 dir *.txt | select Name, LastWriteTime, @{L = "Youbi"; E = {$_.LastWriteTime.DayOfWeek}}
  • NameNへ、ExpressionEへ短縮できる
  • NameLabelとも記述でき、LabelLへ短縮できる

4. プロパティは事前に変数に設定しておける

 $youbi =  @{N = "Youbi"; E = {$_.LastWriteTime.DayOfWeek}}
 dir *.txt | select Name, LastWriteTime, $youbi

上の場合、$youbiの型はSystem.Collections.Hashtable

5. 無名ハッシュテーブルを使わず、Add-MemberでFileInfoを拡張することもできる

 PS> $youbi = { $this.LastWriteTime.DayOfWeek }
 PS> dir *.txt | % { $_ | Add-Member -MemberType ScriptProperty -Name "youbi" -Value $youbi -PassThru } | 
       select Name, LastWriteTime, youbi

上の場合、$youbiをスクリプトブロックとしてあらかじめ変数にしている

参考

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-6


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2019-08-13 (火) 21:53:50