简而言之,我正在尝试获取此命令运行的输出。第一个月是的,我知道你通常在Format-Table之前排序,但是在这个例子中,我在Format-Table命令中创建了一个需要排序的哈希表,问题是,我无法使用Format-Table进行排序。我也考虑过尝试将FT输出到CSV,然后对其进行处理,但这对我也不起作用。我希望得到一个已排序的表。
Format-Table
kh212irz1#
我在Format-Table命令中创建了一个需要排序的散列表根据定义,您 * 不能 * 通过任何-Format-* cmdlet输出hashtable:
-Format-*
Format-*
假设你已经使用了calculated properties,和Format-Table,那么就用Select-Object来代替,这会产生 data 输出,也就是说,以[pscustomobject]示例的形式,你可以通过Sort-Object来排序这些示例的属性。例如,下面的代码创建具有.Name和.MemUse属性的自定义对象,并按后者排序,然后输出前10个结果:
Select-Object
[pscustomobject]
Sort-Object
.Name
.MemUse
Get-Process | Select-Object Name, @{ Name = 'MemUse'; Expression = 'WorkingSet64' } | Sort-Object -Descending MemUse | Select-Object -First 10
反转逻辑并让Sort-Object对Get-Process输出的 * 原始 * 对象进行操作会更高效:
Get-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-*调用通常应仅出现在管道中的 * 最后 *。
Select-Object Name, ...
Format-Table -Name, ...
Format-List -Name, ...
1条答案
按热度按时间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个结果:反转逻辑并让
Sort-Object
对Get-Process
输出的 * 原始 * 对象进行操作会更高效:如果您只关心 for-display 输出,可以将
Select-Object Name, ...
替换为Format-Table -Name, ...
或Format-List -Name, ...
,这说明了重要的一点:Format-*
调用通常应仅出现在管道中的 * 最后 *。