首页/系统/Windows 运维速查/Measure-Object 数值统计
PowerShell 基础66 条

Measure-Object 数值统计

对数值属性做计数、求和、平均与最大最小值统计,是命令行版的“数值汇总”。

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

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 与执行时间。

易错点

  • 忘记 -Property 只会拿到对象个数,看起来像统计没生效,实际是没指定要汇总的属性
  • 目录对象没有 Length 属性,不加 -File 过滤会让求和得到 0 或空值
  • 空集合的统计结果为 $null,直接参与运算或比较会报错,应先判断 Count
  • 用管道读入整个大文件再取 Count 会把内容全部载入内存,日志场景应改用 -Line
  • 脚本里引用未指定的统计字段(如没加 -Average 就用 Average)会得到空值,逻辑判断随之出错

数据来源与参考

  • Microsoft Learn:Measure-Object

相关工具

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