Select-Object — сохранить столбцы по умолчанию, но добавить один

avatar
Steve
9 августа 2021 в 04:28
177
2
2

Я могу использовать Select-Object, чтобы выбрать, какие столбцы отображать, и даже добавить вычисляемые столбцы. Пример:

gci | select *, @{n='LAS'; e={(Get-Date)-$_.LastAccessTime}}

Я хочу добавить вычисляемый столбец, но оставить столбцы по умолчанию. Без подстановочного знака * я получаю только свое рассчитанное свойство. С ним я получаю все. Единственный обходной путь, с которым я должен работать, - это вручную перечислить имена свойств по умолчанию. Есть идеи?

Источник
Abraham Zinala
9 августа 2021 в 04:39
0

Возможно, вам придется использовать один из командлетов Format-* и вместо этого добавить новое вычисляемое свойство. Format-Table -Property *, @{n='LAS'; e={(Get-Date)-$_.LastAccessTime}} -AutoSize ведет себя по-другому?

Steve
9 августа 2021 в 05:03
0

@ Авраам Зинала: Нет, это тот же результат. Кроме того, он удаляет возможность использования моего вычисляемого свойства в другом месте конвейера.

Santiago Squarzon
9 августа 2021 в 05:15
1

Короткий ответ: используйте обходной путь.

Dennis
24 августа 2021 в 13:35
0

Пожалуйста, отметьте один из ответов как решение...

Ответы (2)

avatar
Dennis
23 августа 2021 в 23:07
2

Дело в том, что вы фактически указываете отображать все свойства ('*').

Поэтому, чтобы добавить только стандартные свойства, сначала нужно получить стандартные свойства.

[string[]]$StdProperties = (Get-ChildItem).PSStandardMembers.DefaultDisplayPropertySet[1].ReferencedPropertyNames

На самом деле мы не хотим изменять стандартное свойство возвращаемых объектов

Get-Childitem | select Name | Get-Member| group TypeName | select Name

Name
----
Selected.System.IO.DirectoryInfo
Selected.System.IO.FileInfo

Поэтому нам просто нужно расширить этот извлеченный массив строк с помощью нового свойства для использования.

$StdProperties += 'LAS'

И наконец, как это использовать...

Get-ChildItem | select *, @{n='LAS'; e={(Get-Date) - $_.LastAccessTime}} | 
select $StdProperties
Dennis
23 августа 2021 в 23:12
0

Дополнительные сведения о свойствах по умолчанию см. в разделе Определение свойств по умолчанию для пользовательских объектов.

avatar
Theo
9 августа 2021 в 11:44
1

Просто для развлечения, основываясь на комментарии Авраама, вы можете сделать что-то странное, например:

# get the default properties used on Format-Table
$defaultProps = (((Get-ChildItem | Format-Table | Out-String) -split '\r?\n' | 
                    Where-Object { $_ -match '^\w.*' }) | 
                    Select-Object -First 1) -split '\s+' -ne ''

# now execute the command
Get-ChildItem | Select-Object *, @{n='LAS'; e={(Get-Date)-$_.LastAccessTime}} | 
    Select-Object ($defaultProps + 'LAS') | Format-Table -AutoSize