首页/系统/Windows 运维速查/Group-Object 分组统计
PowerShell 基础66 条

Group-Object 分组统计

按属性值把对象分组并计数,快速完成“一列聚合”分析(按状态统计服务、按扩展名统计文件)。

Windows 运维速查系统更新于 2026-10-13

命令是干什么的

Group-Object 按指定属性把对象分堆并计数,输出每组的 Name、Count 与组内明细,是 PowerShell 里最轻量的“透视表”。配合 Sort-Object Count 立刻得到排行榜;大数据集上加 -NoElement 可以丢弃组内明细,显著降低内存占用。

和 Measure-Object 的分工

Group-Object 只负责分堆与计数,不做数值计算;要算每组的总和、平均或最大值,需要把结果继续管道给 Measure-Object,或先分组再逐组统计。两个命令组合起来才等价于一次分组聚合查询,这也是 PowerShell 里没有 SQL 式聚合函数时的替代写法。

基本信息

适用平台PowerShell 3.0 及以后,Windows PowerShell 与 PowerShell 7 通用
语法Group-Object [-Property] 属性 [-NoElement] [-AsHashTable]
输出字段Name 分组键、Count 组内数量、Group 明细对象
常见组合Sort-Object Count -Descending 做排行;Measure-Object 做数值聚合

典型使用场景

  • 按状态统计服务数量,一眼看出运行与停止各多少
  • 按扩展名统计目录,找出哪类文件数量最多
  • 按进程名聚合,定位多实例进程的名次
  • 按日期或月份分组,观察日志事件的时间分布
  • 分组后逐组处理:对不同组执行不同的后续动作

常用示例

常用示例
Get-Service | Group-Object Status                        # 按状态分组计数
Get-ChildItem C:\Windows -File | Group-Object Extension -NoElement | Sort-Object Count -Descending   # 扩展名排行
Get-Process | Group-Object ProcessName | Sort-Object Count -Descending | Select-Object -First 5
# 以哈希表形式保存,便于按组名直接取值
$g = Get-Service | Group-Object Status -AsHashTable

输出字段读法

字段含义判读
Name分组键的取值空值会单独成为一组
Count该组对象数量排序后即为排行榜
Group组内明细对象集合加 -NoElement 后不再保留
Values多属性分组时的键组合-Property 传多个属性时出现
AsHashTable以哈希表返回结果需要按组名索引时使用
分组计数后接 Sort-Object Count 即得排行榜;再串一个 Where-Object 就能捞出“数量异常”的那一组,是排查集中性问题的常用组合。
-NoElement 只保留 Name 与 Count:在几万条对象上做统计时,它是控制内存的关键开关,代价是看不到组内成员。
字符串分组默认不区分大小写,需要严格区分时加 -CaseSensitive;也可先把属性值统一大小写再分组。分组结果默认按 Name 升序,要看数量排行需显式再排一次序。

易错点

  • 分组键是数组时每个元素都会参与分组,结果与预期不同
  • 大集合不加 -NoElement 会把全部明细对象留在内存里,容易造成压力
  • 只按 Count 排序而不看 Name,容易漏掉分组键为空的那一组
  • 把 Group-Object 当数值聚合用,求和与平均值应交给 Measure-Object

数据来源与参考

  • Microsoft Learn:Group-Object

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌