如何在PowerShell中向对象添加列?
例如,Get-Childitem返回一个对象,包括Mode,LastWriteTime,Length Name等.... 我想用一个额外的列扩展这个对象,该列是从LastWriteTime计算的。
这是原始的Get-Childitem输出:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012.12.15. 17:02 5390 Log_20121215.txt
-a--- 2013.01.02. 17:10 14014 Log_20130102.txt
-a--- 2013.01.07. 17:08 2200 Log_20130107.txt
我想要这个输出:
Mode LastWriteTime Length Name ComputedColumn
---- ------------- ------ ---- --------------
-a--- 2012.12.15. 17:02 5390 Telenor_Log_20121215.txt 20131215
-a--- 2013.01.02. 17:10 14014 Telenor_Log_20130102.txt 20140102
-a--- 2013.01.07. 17:08 2200 Telenor_Log_20130107.txt 20140207
感谢您的帮助。
答案 0 :(得分:10)
根据您的需要,在Add-Member
中使用select
或自定义表达。
计算并存储。保留原始对象,但添加一个自定义列
$data = dir | % { Add-Member -InputObject $_ -MemberType NoteProperty -Name "ComputedColumn" -Value $_.LastWriteTime.AddYears(1).ToString("yyyyMMdd") -PassThru }
在显示之前计算它(或导出到csv等)
dir | select Mode, LastWriteTime, Length, Name, @{name="ComputedColumn";expression={ $_.LastWriteTime.AddYears(1).ToString("yyyyMMdd") }}
实施例。格式表正确显示
dir | select Mode, LastWriteTime, Length, Name, @{name="ComputedColumn";expression={ $_.LastWriteTime.AddYears(1).ToString("yyyyMMdd") }} | ft -AutoSize
Mode LastWriteTime Length Name ComputedColumn
---- ------------- ------ ---- --------------
d-r-- 14.04.2013 17:47:18 Contacts 20140414
d-r-- 15.05.2013 14:19:45 Desktop 20140515
d-r-- 14.04.2013 18:03:33 Documents 20140414
d-r-- 11.05.2013 18:22:57 Downloads 20140511
答案 1 :(得分:0)
扩展对象的最简单方法是将其传递给cmdlet Select-Object。请参阅下面的示例。
# Add the extended property IsVeryBig
Get-ChildItem c:\temp | Select-Object *, IsVeryBig |
ForEach-Object { $_.IsVeryBig = $True }