【问题标题】:Select-Object - Keep default columns but add one选择对象 - 保留默认列但添加一列
【发布时间】:2021-08-09 04:28:40
【问题描述】:

我可以使用 Select-Object 来选择要显示的列,甚至可以添加计算的列。一个例子:

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

我想添加一个计算列,但保留默认列。如果没有 * 通配符,我只会得到我计算出来的属性。有了它,我得到了一切。我必须工作的唯一解决方法是手动列出默认属性名称。有什么想法吗?

【问题讨论】:

  • 您可能必须使用Format-* cmdlet 之一并以这种方式添加新的计算属性。 Format-Table -Property *, @{n='LAS'; e={(Get-Date)-$_.LastAccessTime}} -AutoSize 的行为是否不同?
  • @Abraham Zinala :不,结果相同。此外,它还删除了在管道中其他地方使用我的计算属性的选项。
  • 简短的回答是,使用解决方法。
  • 请考虑将其中一个答案标记为解决方案...

标签: powershell


【解决方案1】:

问题是您实际上声明显示所有属性('*')。

所以要只添加到标准属性,首先需要获取标准属性。

[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

【讨论】:

【解决方案2】:

只是为了好玩,在Abrahams comment 的基础上,你可以做一些奇怪的事情:

# 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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2017-10-20
    • 2018-07-28
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多