measure-object 是 powershell 中用于聚合计算的命令,可对对象集合的数值属性求和、平均值、最大值、最小值和计数;需用 -property 指定属性,并显式使用 -sum、-average 等参数,注意属性必须为数值类型,否则被忽略或需先转换。
measure-object 是 powershell 中专门用于聚合计算的命令,能快速对对象集合中某个数值属性求和、平均值、最大值、最小值、计数等。要计算总和与平均值,关键在于:指定目标属性(用 -property),并明确使用 -sum 和 -average 参数。
基本语法:针对单一数值属性求和与平均值
最常用形式是将对象管道传入 Measure-Object,并通过 -Property 指定字段名:
Get-Process | Measure-Object -Property WorkingSet64 -Sum -Average
输出会包含 Sum 和 Average 字段(单位为字节)。注意:WorkingSet64 是数值型属性;若属性不存在或非数字,该对象会被自动忽略(不报错但影响结果精度)。
一次计算多个统计量,避免重复管道
不必多次调用 Measure-Object。一个命令可同时请求多个统计项:
-
-Sum:返回总和(Sum属性) -
-Average:返回算术平均值(Average属性) -
-Maximum、-Minimum、-Count可一并加入
示例:获取服务启动类型分布中,每个组内进程数的总和与均值(需先分组):
Get-Service | Group-Object Status | ForEach-Object {
$count = $_.Count
[PSCustomObject]@{
Status = $_.Name
Count = $count
}
} | Measure-Object -Property Count -Sum -Average
处理自定义对象或 CSV 数据时的注意事项
从 Import-Csv 或 [PSCustomObject] 创建的数据,属性默认是字符串。若字段本应为数字(如 "Price", "Age"),必须先转换类型,否则 Measure-Object 会跳过或报错:
- 用
Select-Object配合表达式转换:@{Name='Price';Expression={[double]$_.Price}} - 或用
ForEach-Object预处理:$_.Price = [double]$_.Price
错误示范(未转类型):Import-Csv data.csv | Measure-Object -Property Price -Sum → 若 Price 列是字符串,结果 Sum 为 0 或空。
只想要纯数字结果?提取具体属性值
Measure-Object 返回的是 Microsoft.PowerShell.Commands.GenericMeasureInfo 对象。如只需总和数字,直接点取属性即可:
$result = Get-Process | Measure-Object -Property CPU -Sum -Average<br>$result.Sum # 返回纯数字(总 CPU 时间)<br>$result.Average # 返回纯数字(平均 CPU 时间)
这样可直接参与后续计算,比如判断是否超阈值:if ($result.Average -gt 100) { Write-Warning "平均 CPU 偏高" }。











