Measure-Object 是什么
Measure-Object 对一组对象做数值统计:计数、求和、平均、最大与最小,相当于命令行版的汇总工具。它默认只统计对象个数,要汇总数值必须用 -Property 指定属性并加上对应的开关;对文本还能用 -Line、-Word、-Character 统计行数、词数与字符数。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 |
|---|---|
| 语法 | <对象流> | Measure-Object [-Property 属性] [-Sum] [-Average] [-Maximum] [-Minimum] |
| 文本模式 | -Line 行数、-Word 词数、-Character 字符数 |
| 结果对象 | Count 始终存在,Sum 与 Average 等只在指定开关后出现 |
| 边界情况 | 空集合统计时 Sum 等字段为 $null,运算前需判空 |
典型使用场景
- 统计目录内的文件数量与总大小,快速判断数据量级
- 统计日志文件行数,评估日志增长速度是否异常
- 求某个属性的平均值,例如进程的平均内存占用
- 统计文本的词数与字符数,检查字段长度是否符合规范
- 在脚本里做阈值判断,超过设定值就触发告警
常用示例
常用示例
# 目录内文件数量与总大小
Get-ChildItem D:\Data -Recurse -File | Measure-Object -Property Length -Sum
# 统计日志行数,比 (Get-Content).Count 省内存
Get-Content app.log | Measure-Object -Line
# 文本的词数与字符数
Get-Content readme.txt | Measure-Object -Word -Character
# 指定时间窗内的事件条数
Get-WinEvent -FilterHashtable @{LogName='System';Level=1,2} | Measure-Object
# 统计结果可直接参与运算
((Get-ChildItem D:\Data -File | Measure-Object -Property Length -Sum).Sum) / 1GB结果字段读法
| 字段 | 含义 | 出现条件 |
|---|---|---|
| Count | 被统计对象的个数 | 始终存在 |
| Sum | 数值属性的合计 | 指定 -Sum 且属性可累加 |
| Average | 平均值 | 指定 -Average |
| Maximum 与 Minimum | 最大与最小值 | 指定对应开关 |
| Lines 与 Words 与 Characters | 文本统计结果 | 使用 -Line -Word -Character |
不带任何参数时 Measure-Object 只统计对象个数,很多人误以为它会自动求和。要做数值汇总必须同时给出 -Property 与 -Sum 之类的开关。
统计结果里的 Sum 与 Average 是数值类型,可以直接参与运算与比较;但空集合时这些字段是 $null,参与除法或比较会得到意外结果,需要先用 Count 判空。
统计多个属性时可以一次传入属性名数组,得到分行结果;对同一批对象反复统计会重复遍历,数据量大时先把结果缓存到变量再用,能明显减少 IO 与执行时间。