命令是干什么的
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 升序,要看数量排行需显式再排一次序。