#author("2019-08-13T21:53:27+09:00","default:ryuichi","ryuichi")
#author("2019-08-13T21:53:50+09:00","default:ryuichi","ryuichi")
* Select-Objectで取得するオブジェクトの拡張 [#kc4d10b4]

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

 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オブジェクトを無名ハッシュテーブルに変換して新しいプロパティとして選択する [#n1c3e5d8]

 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

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

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

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

- '''Name'''は'''N'''へ、'''Expression'''は'''E'''へ短縮できる
- '''Name'''は'''Label'''とも記述でき、'''Label'''を'''L'''へ短縮できる

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

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

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

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

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

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

** 参考 [#n1e3bdda]

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

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