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

Спасибо за любую помощь.


person gazsiazasz    schedule 15.05.2013    source источник


Ответы (2)


Используйте 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      
person Frode F.    schedule 15.05.2013

Самый простой способ расширить объект - передать его по конвейеру командлету Select-Object. См. Пример ниже.

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

    ForEach-Object { $_.IsVeryBig = $True }
person MFT    schedule 15.05.2013
comment
будьте осторожны, поскольку select, в отличие от Add-Member, создает новый настраиваемый объект с указанными столбцами, поэтому, если ему нужно передать их другому командлету, это не сработает. - person Frode F.; 15.05.2013
comment
Да, я согласен. Если вам нужно поддерживать тип объекта в процессе, вам нужно использовать командлет Add-Member. - person MFT; 15.05.2013