Measure-Object 通过属性操作统计对象数据,支持计数、数值汇总(-Sum/-Average等)、标准差(-StandardDeviation)及全量统计(-AllStats),并可结合 ForEach-Object 实现分组统计。
powershell 对象管道中使用 measure-object(简写为 measure)统计集合数据,核心在于它直接操作对象属性,而非解析文本——这意味着结果稳定、跨语言环境一致,且无需正则匹配。
基础计数:统计对象个数
默认行为就是数管道里有多少个对象:
- Get-ChildItem *.log | Measure → 返回 Count 属性,值为日志文件总数
- Get-Process | Measure -Property CPU → 错误!CPU 是数值型属性,但没加 -Sum/-Average 等统计参数,会报错。必须明确要算什么
数值属性统计:指定 -Property + 统计开关
对具有数字值的属性(如 Length、CPU、WorkingSet)进行汇总计算,需同时提供:
- -Property:指定目标属性名(支持截断,如 -Prop)
- 至少一个统计开关:-Sum、-Average、-Minimum、-Maximum(可缩写为 -Min / -Max;-Average 可缩为 -Ave,但不能用 -Avg)
示例:
高级统计:标准差与一键全量
PowerShell 6+ 支持更精细分析:
- -StandardDeviation:计算指定属性的标准差,反映大小离散程度
- -AllStats:等价于同时指定 -Sum -Average -Minimum -Maximum -StandardDeviation,一行出全部关键指标
例如快速查看当前目录所有文件大小分布:
Get-ChildItem -File | Measure Length -AllStats结合 ForEach-Object 实现分组统计
Measure-Object 本身不支持按类别分组,但可配合 ForEach-Object 构建自定义统计单元。比如统计每个子文件夹的总大小(MB):
Get-ChildItem -Directory | ForEach-Object {$sum = (Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum
[PSCustomObject]@{
Folder = $_.Name
SizeMB = [Math]::Round($sum / 1MB, 2)
}
} | Sort-Object SizeMB -Descending


















