#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