powershell 如何对使用哈希表创建的格式化表进行排序?

u3r8eeie  于 2023-01-09  发布在  Shell
关注(0)|答案(1)|浏览(160)

简而言之,我正在尝试获取此命令运行的输出。
第一个月
是的,我知道你通常在Format-Table之前排序,但是在这个例子中,我在Format-Table命令中创建了一个需要排序的哈希表,问题是,我无法使用Format-Table进行排序。
我也考虑过尝试将FT输出到CSV,然后对其进行处理,但这对我也不起作用。
我希望得到一个已排序的表。

kh212irz

kh212irz1#

我在Format-Table命令中创建了一个需要排序的散列表
根据定义,您 * 不能 * 通过任何-Format-* cmdlet输出hashtable

  • Format-* cmdlet发出输出对象,这些对象的唯一用途是向PowerShell的显示输出格式化系统提供 * 格式化指令 *。简而言之:仅使用Format-* cmdlet格式化数据 * 以供显示 *,从不用于后续 * 编程处理 * -有关详细信息,请参阅this answer

假设你已经使用了calculated properties,和Format-Table,那么就用Select-Object来代替,这会产生 data 输出,也就是说,以[pscustomobject]示例的形式,你可以通过Sort-Object来排序这些示例的属性。
例如,下面的代码创建具有.Name.MemUse属性的自定义对象,并按后者排序,然后输出前10个结果:

Get-Process  | 
  Select-Object Name, @{ Name = 'MemUse'; Expression = 'WorkingSet64' } | 
  Sort-Object -Descending MemUse |
  Select-Object -First 10

反转逻辑并让Sort-ObjectGet-Process输出的 * 原始 * 对象进行操作会更高效:

Get-Process  | 
  Sort-Object -Descending WorkingSet64 |
  Select-Object -First 10 |
  Select-Object Name, @{ Name = 'MemUse'; Expression = 'WorkingSet64' }

如果您只关心 for-display 输出,可以将Select-Object Name, ...替换为Format-Table -Name, ...Format-List -Name, ...,这说明了重要的一点:Format-*调用通常应仅出现在管道中的 * 最后 *。

相关问题