[玩转系统] 如何在 PowerShell 中使用 Measure-Object cmdlet?
作者:精品下载站 日期:2024-12-14 21:38:51 浏览:13 分类:玩电脑
如何在 PowerShell 中使用 Measure-Object cmdlet?
PowerShell 中的 Measure-Object cmdlet 允许您轻松测量对象的属性并计算统计数据。它可以测量对象以计算属性值的最小值、最大值、总和、平均值等。 Measure-Object 对于分析数据集、计算对象集合中的数字以及生成报告非常有用。
在本文中,我们将概述 Measure-Object 以及如何在日常 PowerShell 脚本中利用它的示例。我们将涵盖:
- Measure-Object 是什么以及它为何有用
- Measure-Object 的基础知识以及如何测量简单属性(例如计数和长度)
- 计算数值属性值的总和、平均值、最小值和最大值
- 使用Measure-Object按特定属性分析对象数据集
- 过滤对象以更改测量范围
- 使用 Measure-Object 计算文件文件夹大小以进行报告
无论您需要计算项目、分析属性分布还是计算平均值,Measure-Object 都是 PowerShell 工具箱中一个方便的 cmdlet。读完本文后,您将了解在您自己的 PowerShell 脚本和报告中实现 Measure-Object 的基础知识。
PowerShell 中的测量对象简介
PowerShell Measure-Object 是一个允许您测量对象或数组的属性的命令。它可以为您提供对象属性的统计数据,例如计数、总和、最小值、最大值和平均值。该命令使用方便,可适用于各种数据类型。
Measure-Object 生成对象的快速统计报告。这使您可以分析数据集、汇总信息并进行计算,而无需自己手动迭代对象。
要利用 Measure-Object 的强大功能,了解其语法非常重要。 Measure-Object 的基本语法如下:
Measure-Object
[-InputObject] <Object[]>
[-Property <String[]>]
[-Average]
[-Sum]
[-Maximum]
[-Minimum]
[-Count]
[-IgnoreWhiteSpace]
[<CommonParameters>]
-InputObject
参数指定将对其执行测量的对象的集合。 -Property
参数允许您指定测量所基于的一个或多个属性。默认情况下,Measure-Object 计算计数,但您可以使用 -Average
、-Sum
、-Maximum
、-Minimum
和 -Count
参数来计算附加统计数据。
例如,假设您想了解文件目录的计数、文件总大小和平均大小。使用 Measure-Object,您可以轻松地在一行中获取这些指标:
Get-ChildItem | Measure-Object -Property Length -Sum -Average -Maximum -Minimum
这使得 Measure-Object 对于 PowerShell 报告和分析脚本都非常有用。让我们查找存储在特定目录中的所有文件的统计信息:
$FileStats = Get-ChildItem -Path "C:\Temp" -File | Measure-Object -Property Length -Minimum -Maximum -Sum -Average
Write-Host "Total number of Files: $($FileStats.Count)"
Write-Host "Sum of file sizes: $($FileStats.Sum) bytes"
Write-Host "Average file size: $($FileStats.Average) bytes"
Write-Host "Minimum file size: $($FileStats.Minimum) bytes"
Write-Host "Maximum file size: $($FileStats.Maximum) bytes"
使用Measure-Object对对象进行计数
让我们从测量物体基本属性(如数量、长度和大小)的示例开始。
测量对象数量
Measure-Object 命令可用于计算集合中对象的数量。这是通过指定 Count 属性来完成的。例如,如果您有一个数字数组,则可以使用以下命令来计算数组中对象的数量:
$Array = 1, 2, 3, 4, 5
$Array | Measure-Object | Select-Object -ExpandProperty Count
要获取对象的总数,请使用 Count 属性:
该命令的输出将是一个数字,即数组中对象的计数。当您需要知道正在使用多少个对象时,这会很有用。
Get-Process | Measure-Object | Select-Object -ExpandProperty Count
这将返回进程对象的数量。
Measure-Object 的另一个常见用例是计算集合中对象的数量。当您需要确定目录的大小、文件夹中的文件数或系统上运行的进程数时,这会很有用。这是一个例子:
$Files = Get-ChildItem -Path "C:\Source" -File
$FileCount = $Files | Measure-Object
Write-Host "The number of files in the folder is $($FileCount.Count)"
在此示例中,我们使用 Get-ChildItem cmdlet 检索指定文件夹中的文件。然后,Measure-Object 计算文件数量,并使用 Write-Host cmdlet 显示结果。
使用 Measure-Object 测量对象属性
Measure-Object 也可用于测量对象的属性。这是通过指定 Property 参数来完成的。例如,如果您有一个包含“Size”属性的对象数组,则可以使用以下命令来测量对象的平均大小:
测量文件大小
让我们看一个分析文件大小的示例:
Get-ChildItem | Measure-Object -Property Length -Minimum -Maximum -Average -Sum
这提供了完整的报告:
Count : 99
Average : 15269056
Sum : 1509581586
Maximum : 756347934
Minimum : 76
通过一行,我们可以获得文件的数量、平均大小、总大小、最小和最大文件。
使用Measure-Object计算总和
例如,假设您想了解文件夹中所有 CSV 文件的总文件大小。您可以简单地使用 Measure-Object,而不必手动循环每个文件对象并计算总和:
Get-ChildItem -Path "C:\Temp" *.csv | Measure-Object -Property Length -Sum
您还可以在同一命令中测量多个属性:
Get-Process | Measure-Object -Property CPU,WS -Sum -Average -Maximum -Minimum
我们可以使用 Length 属性获取文件夹的大小,该属性提供以字节为单位的大小:
Get-ChildItem -Path "C:\Temp" -File -recurse | Measure-Object -Property Length -Sum
Recurse 参数递归地获取给定文件夹和子文件夹中的所有文件。此命令的输出将是给定文件夹中所有文件的总大小。您还可以使用 Sum、Minimum 和 Maximum 开关来获取有关属性的其他有用信息。
测量字符串长度
对于字符串,您可以测量长度属性:
$strings = "Apple","Orange","Banana"
$strings | Measure-Object -Property Length -Average
这将输出平均字符串长度和字符串数组中的元素数量。
计算平均值
要计算数字属性的筛选子集的平均值,请使用 Average:
Get-Process | Where CPU -GT 10 | Measure-Object -Property CPU -Average
这对输入对象中超过 10% 的进程的 CPU 使用率进行了平均。
求最小值和最大值
要获取属性的最小值或最大值,请使用最小值和最大值:
Get-ChildItem .\Reports | Measure-Object -Property LastWriteTime -Minimum -Maximum
这提供了最旧和最新的文件写入时间。
带有哈希表的 PowerShell 测量对象
Measure-Object 可以与数组和哈希表一起使用。当与数组一起使用时,它将测量数组中每个对象的属性。当与哈希表一起使用时,它将测量哈希表中值的属性。例如,如果您有一个包含产品价格的哈希表,则可以使用以下命令来计算其属性。
# Define a hash table of products and their prices
$products = @{
'Laptop' = 999.99
'Tablet' = 299.99
'Headphones' = 49.99
'Monitor' = 149.99
'Keyboard' = 29.99
}
# Calculate statistics on the prices
$stats = $products.Values | Measure-Object -Average -Maximum -Minimum -Sum
# Output the statistics
Write-Output "Average Price: $($stats.Average)"
Write-Output "Maximum Price: $($stats.Maximum)"
Write-Output "Minimum Price: $($stats.Minimum)"
Write-Output "Total Value of All Products: $($stats.Sum)"
该命令的输出将为您提供产品价格的计数、平均值、最大值、最小值和总和。
将 Measure-Object 与自定义对象结合使用 (PSCustomObject)
让我们看一个现实世界的示例,其中我们有一个学生列表(表示为 PSObject 或 PSCustomObject)以及他们在多个科目中的相应分数。我们将使用 Measure-Object cmdlet 找出最高总分、平均总分和最低总分。
# Create a list of students with their marks
$students = @(
[PSCustomObject]@{ Name = "Alice"; Math = 85; Science = 88; English = 90 },
[PSCustomObject]@{ Name = "Bob"; Math = 80; Science = 82; English = 78 },
[PSCustomObject]@{ Name = "Charlie"; Math = 90; Science = 89; English = 92 },
[PSCustomObject]@{ Name = "David"; Math = 70; Science = 76; English = 72 }
)
# Calculate the total marks for each student
$studentsWithTotal = $students | ForEach-Object {
[PSCustomObject]@{
Name = $_.Name
Total = $_.Math + $_.Science + $_.English
}
}
# Use Measure-Object to find out the highest, lowest, and average total marks
$marksStats = $studentsWithTotal | Measure-Object -Property Total -Maximum -Minimum -Average
# Display the statistics
Write-Output "Highest Total Marks: $($marksStats.Maximum)"
Write-Output "Lowest Total Marks: $($marksStats.Minimum)"
Write-Output "Average Total Marks: $($marksStats.Average)"
同样,您可以使用此方法对对象的任何属性执行计算。
使用 Measure-Object 计算 CSV 文件列
让我们创建一个假设的 CSV 文件,其中包含学生及其测试成绩的详细信息。
Name,MathScore,EnglishScore,ScienceScore
John,85,90,78
Jane,88,89,92
Bob,79,85,88
Alice,90,87,95
Eve,80,84,89
这是 PowerShell 脚本
# Import Students data from CSV File
$StudentsData = Import-Csv -Path "C:\Data\students.csv"
# Average Math Score
$StudentsData | Measure-Object -Property MathScore -Average | Select-Object -Property Average
# Minimum and Maximum Science Score
$StudentsData | Measure-Object -Property ScienceScore -Minimum -Maximum | Select-Object -Property Minimum, Maximum
# Total English Score across all students
$StudentsData | Measure-Object -Property EnglishScore -Sum | Select-Object -Property Sum
使用 Measure-Object 计算平均值
Measure-Object 最常见的用途之一是计算平均值。这可以通过使用平均开关参数来完成。例如,如果您有一个数字数组,则可以使用以下命令来计算平均值:
# Define an array of numbers
$numbers = 10, 20, 30, 40, 50
# Calculate the average using Measure-Object
$Average = $numbers | Measure-Object -Average | Select-Object -ExpandProperty Average
# Output the average
Write-Output "The average of the numbers is: $average"
该命令的输出将是数组中数值的平均值。您还可以使用 Sum 开关参数来计算总和。
让我们再举一个例子:假设您正在跟踪 [TimeSpan] 对象中某些任务的持续时间,并且您想要找到平均持续时间:
$timespans = [TimeSpan]::FromMinutes(10), [TimeSpan]::FromMinutes(15), [TimeSpan]::FromMinutes(20)
$averageTime = $timespans | Measure-Object -Property TotalMinutes -Average | Select-Object -ExpandProperty Average
Write-Output "The average duration is: $($averageTime) minutes."
将 Measure-Object 与 PowerShell 管道结合使用
Measure-Object 可与 PowerShell 管道一起使用,以测量对象通过管道输入时的属性。例如,如果您有一个文件列表,并且想知道当前目录中文件的总大小,可以使用以下命令:
Get-ChildItem | Measure-Object -Property Length -Sum
此命令的输出将是文件夹中文件的总大小。
使用 Measure-Object cmdlet 获取总和
除了计算平均值和计数之外,Measure-Object 还可以计算数值的总和。当您需要确定一组数字的总价值或根据总和执行其他计算时,这会很有用。这是一个例子:
$numbers = 1..10
$sum = $numbers | Measure-Object -Sum
Write-Host "The sum of the numbers is $($sum.Sum)"
在此示例中,我们使用范围运算符创建一个从 1 到 10 的数字数组。然后,Measure-Object 计算数字的总和,并使用 Write-Host cmdlet 显示结果。您还可以使用以下替代方法:
$numbers = 1, 2, 3, 4, 5
$numbers | Measure-Object -Sum | Select-Object -Property Sum
同样,您可以从给定的数值中选择最小值或最大值。
在 PowerShell 中使用 Measure-Object 计算文件大小
Measure-Object 还可用于计算文件夹或目录中文件的大小。对于文件,您可以测量 Length 属性,该属性提供以字节为单位的大小。当您需要确定文件夹的总大小或目录中文件的平均大小时,这非常有用。这是一个例子:
Get-ChildItem -Path "C:\Temp" | Measure-Object -Property Length -Sum
这总计了“文档”文件夹中所有文件的总大小。
$files = Get-ChildItem -Path "C:\MyFolder" -File
$totalSize = $files | Measure-Object -Sum Length
Write-Host "The total size of the files in the folder is $($totalSize.Sum) bytes"
在此示例中,我们使用 Get-ChildItem cmdlet 检索指定文件夹中的文件。然后,Measure-Object 根据“Length”属性计算文件大小的总和,并使用 Write-Host cmdlet 显示结果。
计算每种文件类型的大小
要在 PowerShell 中获取按文件类型分组的文件的大小,可以将 Get-ChildItem cmdlet 与 Group-Object cmdlet 结合使用。这是分步指南:
$files = Get-ChildItem -Path "C:\Temp" -File -Recurse
$groupedFiles = $files | Group-Object -Property Extension
$result = $groupedFiles | ForEach-Object {
$sum = ($_.Group | Measure-Object -Property Length -Sum).Sum
[PSCustomObject]@{
Extension = $_.Name
TotalSizeMB = [math]::Round($sum / 1MB, 2)
}
}
$result | Format-Table -AutoSize
计算字符串中的行数、单词数和字符数
Measure-Object cmdlet 可用于计算文本中的字符、单词和行数。以下是如何使用它来测量字符串中的单词:
"PowerShell is powerful." | Measure-Object -Word
要统计字符串对象或文本对象中的行数、单词数和字符数,可以运行以下命令:
# Define a multi-line string
$text = @"
Hello, World!
Welcome to PowerShell.
Have a great day!
"@
# Measure lines, number of words, and character counts
$metrics = $text | Measure-Object -Line -Word -Character
$metrics
下面是计算文本文件的行数、单词数和字符数的另一个示例:
#Get the Contents of the File
$FileContents = Get-Content C:\Temp\AppLog.txt
#Count the Number of Lines, Words, and Characters
$FileContents | Measure-Object -Line -Word -Character
请注意,默认情况下,在确定字符数时会计算空格。使用 -IgnoreWhiteSpace 布尔值来忽略它。
测量对象示例和用例
Measure-Object 有很多用例。一些例子包括:
- 使用“计数”、“总和”、“平均值”、“最大值”和“最小值”对对象进行各种类型的测量
- 计算对象的数量,例如文件夹中的文件数量
- 测量文件夹中文件的大小
- 测量数组中字符串的平均长度
- 计算指定属性的最大值
- 计算指定属性的平均值
- 测量给定时间跨度之间的平均时间。
- 计算指定属性值的总和
- 测量指定属性的最小值
- 计算字符串中的行数、单词数和字符数
结论
Measure-Object 是 PowerShell 中功能强大的 cmdlet,可让您对对象执行各种计算和测量。无论您需要计算平均值、计数对象、确定文件大小还是执行其他统计操作,Measure-Object 都为您提供了高效执行这些操作的工具。只需一行,您就可以快速计算任何对象输出的属性的统计信息和指标。
在这篇文章中,我们介绍了使用 Measure-Object 来计算对象、求和属性值、查找平均值、识别最小值和最大值以及生成详细统计报告的基础知识。您学习了如何分析特定对象属性、测量过滤子集、输出自定义对象等等。
通过了解如何使用 Measure-Object,您可以深入了解数据并做出更好的决策。最新版本的 PowerShell 7x 支持标准差等新功能。如需更多帮助,请查看有关 Measure-Object 的 Microsoft 文档。如果您对这个多功能 cmdlet 有任何其他用例,请在评论中告诉我!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag