Object powershell扩展对象

Object powershell扩展对象,object,powershell,extend,get-childitem,Object,Powershell,Extend,Get Childitem,如何向PowerShell中的对象添加列 例如,Get Childitem返回一个对象,其中包含Mode、LastWriteTime、Length Name等。。。。 我想用一个额外的列来扩展这个对象,这个列是从LastWriteTime计算出来的 这是原始Get Childitem输出: Mode LastWriteTime Length Name

如何向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

感谢您的帮助。

扩展对象的最简单方法是将其通过管道传输到cmdlet Select对象。请参见下面的示例

# Add the extended property IsVeryBig
Get-ChildItem c:\temp | Select-Object *, IsVeryBig | 

    ForEach-Object { $_.IsVeryBig = $True }

根据需要使用
addmember
或在
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") }} | 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      

请注意,
select
,与
addmember
不同,它创建了一个具有指定列的新自定义对象,因此,如果他需要将这些列通过管道传输到另一个cmdlet,它将无法工作。是的,我同意。如果需要在流程中维护对象类型,则需要使用Add-Member cmdlet。
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