PowerShell Measure-Object: Полное руководство с примерами

Подсчет или расчет числовых свойств объектов, таких как символы, слова и строки в строковых объектах, может быть утомительным. К счастью, командлет PowerShell Measure-Object готов решить эту задачу.

В этом руководстве вы узнаете о мощи командлета Measure-Object в автоматизации измерения свойств объектов в PowerShell.

Присоединяйтесь, чтобы улучшить свои навыки измерения объектов!

Предварительные требования

Это руководство – это практическое демонстрационное занятие. Для работы вам понадобится система с установленным PowerShell. В этом руководстве используется Windows 10 с PowerShell v7.

Подсчет файлов и папок

Знание количества файлов и папок в каталоге может быть полезным в различных сценариях. Одним из примеров является случай, когда вам необходимо отслеживать размер папки или проверять количество файлов в каталоге.

Командлет Measure-Object подсчитывает количество файлов и папок в каталоге. Точное количество помогает вам лучше управлять и оптимизировать ресурсы системы.

Чтобы увидеть, как работает командлет Measure-Object при подсчете файлов и папок:

1. Откройте PowerShell и выполните следующую команду Get-ChildItem, чтобы подсчитать и вернуть общее количество файлов и папок (Measure-Object) в текущем каталоге.

Get-ChildItem | Measure-Object

Ниже приведен вывод, указывающий на 4852 файлов и папок в текущем каталоге.

Counting the files and folders in the current directory

Возможно, вы хотите включить все файлы и подкаталоги в дерево каталогов рекурсивно. Если это так, добавьте параметр -Recurse, как показано ниже. Get-ChildItem -Recurse | Measure-Object

2. Затем выполните ту же команду, что и в первом шаге. Но на этот раз добавьте параметр -Directory, чтобы подсчитать только общее количество каталогов в рабочем каталоге.

Get-ChildItem -Directory | Measure-Object

Как видно ниже, общее количество теперь меньше (135), поскольку команда учитывала только каталоги, исключая все остальные объекты.

Counting the number of directories in the current directory

3. Теперь выполните следующую команду, чтобы подсчитать исполняемые файлы (.exe) в текущем каталоге.

Параметр -Filter указывает командлету Get-ChildItem фильтровать результаты и возвращать только файлы с указанным расширением (например, *.txt, *.jpg, *.csv).

Get-ChildItem -Filter *.exe | Measure-Object
Counting the number of executable files in a directory

Измерение размеров файлов

Измерение длины и размеров объектов может помочь лучше управлять вашей системой, так как большие файлы влияют на производительность системы. Помимо подсчета свойств, вы также можете измерить длину и размер объектов с помощью командлета Measure-Object.

Запустите код ниже, чтобы получить все файлы в текущем каталоге (Get-ChildItem) и отобразить (Write-Host) их соответствующие длины в байтах по умолчанию.

Нижеследующий код выводит каждое измерение в консоль, включая минимальный и максимальный размеры файлов, средний размер файла, сумму размеров файлов и общее количество файлов.

# Установите порог для среднего размера файла
$threshold = 5000000 
# Измерьте размер каждого файла в текущем каталоге
$files = Get-ChildItem | Measure-Object -Property length -Minimum -Maximum -Sum -Average

Write-Host "Minimum file size: $($files.Minimum) bytes"
Write-Host "Maximum file size: $($files.Maximum) bytes"
Write-Host "Sum of file sizes: $($files.Sum) bytes"
Write-Host "Average file size: $($files.Average) bytes"
Write-Host "Total number of files: $($files.Count)"

# Проверьте, выше или ниже пороговое значение среднего размера файла
if ($files.Average -ge $threshold) {
    # Если средний размер файла выше порога, воспроизведите звук высокой частоты
    [console]::beep(1000, 500)
} else {
    # Если средний размер файла ниже порога, воспроизведите звук низкой частоты
    [console]::beep(500, 500)
}

Ниже вы можете увидеть размеры, выраженные в байтах.

Measuring file sizes

Возможно, вставка кода в консоль – не ваше. В таком случае сохраните код в файл сценария PowerShell и выполните его.

Теперь выполните следующие команды, чтобы получить файл в текущем каталоге, где (Where-Object) его размер ($_.Length) равен (-eq) максимальному размеру файла ($files.Maximum).

# Получите и сохраните файл такого же размера, как $files.Maximum
$max = Get-ChildItem | Where-Object -FilterScript {$_.Length -eq $files.Maximum}
# Покажите значение максимального размера ($files.Maximum) и файл с этим размером
Write-Host "Maximum file size: $($files.Maximum) bytes `nFile: $max"

Вывод ниже показывает имя самого большого файла в текущем каталоге.

Getting the most extensive file in size

Измерение содержимого текстового файла

Вместо измерения размеров файлов вам может потребоваться определить количество строк, слов или символов в текстовом файле. В таком случае у cmdlet Measure-Object есть много других параметров для измерения содержимого текстового файла.

Запустите код ниже, чтобы выполнить следующие действия: измерить содержимое текстового файла с помощью -Character, -Line и -Word с помощью Measure-Object и вывести (Write-Host) измерения.

Убедитесь, что вы измените значения переменных $file_path и $file_content на свои предпочтительные.

# Определить путь к файлу и содержимое
$file_path = "C:\Temp\measure-object.txt"
$file_content = "One fish, two fishes, three fishes"

# Создать файл по определенному пути к файлу и содержимому
Set-Content -Path $file_path -Value $file_content

# Измерить содержимое текстового файла
$measurements = Get-Content -Path $file_path | Measure-Object -Character -Line -Word

# Вывести измерения в консоль
Write-Host "The file '$file_path' contains $($measurements.Lines) lines, $($measurements.Words) words, and $($measurements.Characters) characters."
Measuring text file contents

Измерение логических значений

Логические значения – это значения, которые могут быть только true или false. В PowerShell логические значения часто используются для управления ходом скрипта, определения условия (true или false) или указания на успешное выполнение команды или ее сбой.

Измерение логических значений может быть полезным в различных сценариях, таких как:

  • Подсчет количества значений true или false в наборе данных.
  • Определение процента истинных значений относительно общего числа значений.

Эта информация может помочь принимать обоснованные решения при обработке или анализе данных.

Чтобы увидеть, как работает измерение логических значений:

Выполните следующие команды для подсчета суммы булевых значений (значений true по умолчанию) в массиве ($values).

# Определите массив булевых значений ($true и $false).
$values = $true,$false,$false,$true,$true,$true,$false,$false,$true
# Измерьте (подсчитайте) булевые значения (значения true по умолчанию).
$values | Measure-Object -Sum

Ниже общее количество булевых значений – девять (9), в то время как сумма равна пяти (5), поскольку учитываются только значения true.

А что насчет значений false? Перейдите к следующему шагу и выполните еще несколько команд.

Counting the number of true values in an array

Теперь выполните код ниже, чтобы вычесть сумму значений true ($trueCount) из общего количества булевых значений ($count). Разница от уравнения – это общее количество значений false ($falseCount).

# Получите общее количество булевых значений в массиве
$count = $values.Count
# Получите сумму значений true
$trueCount = ($values | Measure-Object -Sum).Sum
# Вычтите общее количество значений true из общего количества булевых значений
# чтобы получить общее количество значений false
$falseCount = $count - $trueCount
# Отобразите общие подсчеты значений true и false
Write-Host "Number of true values: $trueCount"
Write-Host "Number of false values: $falseCount"
Counting the number of false values

Если измерение логических значений – повседневная задача, вы можете создать функцию, которую можно вызывать в любое время для выполнения задачи.

Измерение хеш-таблиц

Хеш-таблицы в PowerShell (коллекции пар ключ-значение) позволяют вам быстро и эффективно сохранять и извлекать данные. Если вам нужно знать количество элементов в хеш-таблице или максимальное и минимальное значения, позвольте командлету Measure-Object измерить ваши хеш-таблицы.

Выполните следующие команды, чтобы найти значения свойства Num с использованием параметров -Minimum и -Maximum в вашей хеш-таблице ($MyHastable).

# Создайте хеш-таблицу, содержащую три хеш-таблицы, каждая из которых имеет свойство Num.
$MyHashtable = @(@{Num=10}, @{Num=20}, @{Num=30})
# Измерьте свойство Num в хеш-таблице по минимальному и максимальному значению.
$Stats = $MyHashtable | Measure-Object -Minimum -Maximum Num
# Отобразите измерения хеш-таблицы
$Stats
Measuring hashtables

Измерение стандартного отклонения

Просмотр наборов данных может быть бессистемным, но это не обязательно так. Измерение стандартного отклонения удобно при понимании распределения значений набора данных. Вы также можете определить любые выбросы или необычные данные, влияющие на результаты.

Стандартное отклонение измеряет вариацию или разброс значений набора данных от среднего значения. Это измерение рассчитывается путем нахождения квадратного корня из дисперсии данных, которая является средним квадратом различий от среднего значения.

Запустите приведенный ниже код, чтобы вычислить и отобразить -Average и -StandardDeviation массива чисел, сохраненных в переменной $Numbers.

# Определите массив чисел
$Numbers = 10, 20, 30, 40, 50

# Рассчитайте среднее и стандартное отклонение чисел
$Average = ($Numbers | Measure-Object -Average).Average
$StdDev = ($Numbers | Measure-Object -StandardDeviation).StandardDeviation

# Выведите результаты
"Average: $Average"
"Standard deviation: $StdDev"

В статистике среднее значение измеряет центральную тенденцию, описывая типичное или наиболее характерное значение набора данных.

Среднее значение рассчитывается путем сложения всех чисел в наборе данных и деления на общее количество значений. В этом примере набор данных составляет {10, 20, 30, 40, 50} с суммой 150, а в наборе 5 чисел.

Следовательно, среднее значение рассчитывается ниже, и это 30.

Average = (10 + 20 + 30 + 40 + 50) / 5 = 30

С другой стороны, стандартное отклонение измеряет разброс или дисперсию набора данных. Стандартное отклонение рассчитывается следующим образом:

1. Find the difference between each data point and the average:
   10 - 30 = -20
   20 - 30 = -10
   30 - 30 = 0
   40 - 30 = 10
   50 - 30 = 20
   
2. Square each of these differences:
   (-20)^2 = 400
   (-10)^2 = 100
   0^2 = 0
   10^2 = 100
   20^2 = 400
   
3. Add up all the squared differences:
   400 + 100 + 0 + 100 + 400 = 1000
   
4. Divide the sum of squared differences by the total number of values:
   1000 / 5 = 200
   
5. Take the square root of the result:
   sqrt(200) = 14.142135623731
   
The standard deviation of this set of data is approximately 14.14. But 
in this case, the result is 15.8113883008419 
because of floating-point arithmetic limitations in computers.
Measuring the standard deviation

Заключение

Измерение данных – это важная задача, а командлет PowerShell Measure-Object – мощный инструмент для ее выполнения. В этом учебнике вы узнали, как измерять данные различными способами. Независимо от того, работаете ли вы с файлами, содержимым текстовых файлов, логическими значениями, строками, массивами или хеш-таблицами, измерение их может предоставить ценные идеи.

Теперь вы можете легко вычислить среднее, максимальное и минимальное значения ваших данных, а также измерить вариацию или разброс ваших данных. С помощью этих функций вы можете получить более глубокое понимание ваших данных и принимать обоснованные решения на основе анализа.

Обладая этими новыми знаниями, почему бы вам не расширить свой инструментарий PowerShell и не добавить Compare-Object в свою арсенальную ячейку?

Source:
https://adamtheautomator.com/powershell-measure-object/