约 2048 字

约 10 分钟

#排序与分组

Sort-Object 用于按一个或多个属性对对象排序,Group-Object 用于按属性值将对象分组。两者经常配合使用,以便统计和查看数据的分布。

#Sort-Object 排序

#基本排序

默认按属性值升序排序,使用 -Descending 改为降序:

> Get-Process | Sort-Object -Property CPU
> Get-Process | Sort-Object -Property CPU -Descending

#按多个属性排序

属性名之间用逗号分隔,排序时依次比较:

> Get-ChildItem -File | Sort-Object -Property Extension, Length

-Descending 会作用于指定的排序属性:

> Get-ChildItem -File | Sort-Object -Property Extension, Length -Descending

如果需要不同属性使用不同的排序方向,可以使用哈希表形式的属性:

> Get-ChildItem -File | Sort-Object -Property @{ Expression = 'Extension'; Descending = $true }, Length

#去除重复项

-Unique 在排序后去除重复项:

> Get-ChildItem -File | Sort-Object -Property Extension -Unique

#Group-Object 分组

#基本分组

按属性值分组:

> Get-ChildItem -File | Group-Object -Property Extension

结果对象通常包含以下属性:

属性说明
Name分组的键值,例如扩展名
Count该组中的对象数量
Group该组包含的原始对象集合

#只统计数量

使用 -NoElement 不保留 Group 属性,只返回分组名称和数量:

> Get-ChildItem -File | Group-Object -Property Extension -NoElement

#访问分组内容

> $groups = Get-ChildItem -File | Group-Object -Property Extension
> $groups | Sort-Object -Property Count -Descending | Select-Object -Property Name, Count
> $groups[0].Group

#组合示例

按进程名分组,再按数量降序查看前 5 项:

> Get-Process | Group-Object -Property ProcessName | Sort-Object -Property Count -Descending | Select-Object -First 5 -Property Name, Count

#注意事项

  • Sort-Object 默认升序,-Descending 表示降序。
  • 多个排序属性按书写顺序依次比较。
  • -Unique 基于排序使用的属性去重,适合提取不重复的值。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2