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 (4d)