当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 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

[玩转系统] 如何在 PowerShell 中使用 Measure-Object cmdlet?

这使得 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

[玩转系统] 如何在 PowerShell 中使用 Measure-Object cmdlet?

您还可以在同一命令中测量多个属性:


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 有任何其他用例,请在评论中告诉我!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯