2013-05-15 176 views
4

如何將列添加到PowerShell中的對象?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 

感謝您的幫助。

回答

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  
0

擴展對象的最簡單方法是將其管道傳遞給cmdlet Select-Object。看下面的例子。

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

    For-EachObject { $_.IsVeryBig = $True } 
+1

要小心'select',不像'Add-Member',用指定的列創建一個新的自定義對象,所以如果他需要將它們傳送到另一個cmdlet,工作。 –

+0

是的,我同意。如果您需要在流程中維護對象類型,則需要使用Add-Member cmdlet。 – MFT