PowerShell Measure-Object: Una guía completa con ejemplos

Contar o calcular propiedades numéricas de objetos, como caracteres, palabras y líneas en objetos de cadena, puede resultar exasperante. Afortunadamente, el cmdlet PowerShell Measure-Object está a la altura de la tarea.

En este tutorial, aprenderás el poder del cmdlet Measure-Object para automatizar la medición de propiedades de objetos en PowerShell.

Sumérgete para mejorar tus habilidades de medición de objetos.

Requisitos previos

Este tutorial es una demostración práctica. Para seguirlo, necesitarás un sistema con PowerShell instalado. Este tutorial utiliza Windows 10 con PowerShell v7.

Contar archivos y carpetas

Saber el número de archivos y carpetas en un directorio puede ser útil en varios escenarios. Un ejemplo es cuando necesitas monitorizar el tamaño de una carpeta o verificar la cantidad de archivos en un directorio.

El cmdlet Measure-Object cuenta el número de archivos y carpetas en un directorio. El recuento exacto te ayuda a gestionar y optimizar mejor los recursos de tu sistema.

Para ver cómo funciona el cmdlet Measure-Object al contar archivos y carpetas:

1. Abre PowerShell y ejecuta el siguiente comando Get-ChildItem para contar y devolver el total de archivos y carpetas en tu directorio actual (Measure-Object).

Get-ChildItem | Measure-Object

La salida a continuación indica 4852 archivos y carpetas en el directorio actual.

Counting the files and folders in the current directory

Tal vez desees incluir todos los archivos y subdirectorios en el árbol de directorios de forma recursiva. Si es así, añade el parámetro -Recurse, como se muestra a continuación. Get-ChildItem -Recurse | Measure-Object

2. A continuación, ejecuta el mismo comando de abajo como lo hiciste en el paso uno. Pero esta vez, añade el parámetro -Directory para contar solo los directorios totales dentro del directorio de trabajo.

Get-ChildItem -Directory | Measure-Object

Como puedes ver a continuación, el recuento total es ahora menor (135) ya que el comando solo contó los directorios, excluyendo todos los demás objetos.

Counting the number of directories in the current directory

3. Ahora, ejecuta el siguiente comando para contar los archivos ejecutables (.exe) en tu directorio actual.

El parámetro -Filter indica al cmdlet Get-ChildItem que filtre los resultados y solo devuelva los archivos con la extensión que especifiques (es decir, *.txt, *.jpg, *.csv).

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

**Midiendo Tamaños de Archivos**

Medir las longitudes y tamaños de objetos puede ayudar a gestionar mejor su sistema, ya que los archivos grandes afectan el rendimiento del mismo. Además de contar propiedades, también puedes medir la longitud y tamaño de objetos mediante el cmdlet Measure-Object.

Ejecuta el código a continuación para recuperar todos los archivos en el directorio actual (Get-ChildItem) y mostrar (Write-Host) sus respectivas longitudes en bytes de forma predeterminada.

El código a continuación muestra cada medida en la consola, incluyendo los tamaños mínimo y máximo de archivos, el tamaño promedio de archivo, la suma de tamaños de archivo y el número total de archivos.

# Establece el umbral para el tamaño promedio de archivo
$threshold = 5000000 
# Mide el tamaño de cada archivo en el directorio actual
$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)"

# Verifica si el tamaño promedio de archivo está por encima o por debajo del umbral
if ($files.Average -ge $threshold) {
    # Si el tamaño promedio de archivo está por encima del umbral, reproduce un sonido agudo
    [console]::beep(1000, 500)
} else {
    # Si el tamaño promedio de archivo está por debajo del umbral, reproduce un sonido grave
    [console]::beep(500, 500)
}

A continuación, puedes ver los tamaños mostrados en bytes.

Measuring file sizes

Tal vez pegar el código en la consola no sea lo tuyo. Si es así, guarda el código en un archivo de script de PowerShell y ejecútalo.

Ahora, ejecuta los siguientes comandos para obtener un archivo en el directorio actual, donde (Where-Object) su tamaño ($_.Length) es igual (-eq) al tamaño máximo del archivo ($files.Maximum).

# Obtener y almacenar el archivo del mismo tamaño que $files.Maximum
$max = Get-ChildItem | Where-Object -FilterScript {$_.Length -eq $files.Maximum}
# Mostrar el valor del tamaño máximo ($files.Maximum) y el archivo con ese tamaño
Write-Host "Maximum file size: $($files.Maximum) bytes `nFile: $max"

La salida a continuación muestra el nombre del archivo más extenso en el directorio actual.

Getting the most extensive file in size

Medición del contenido de archivos de texto

En lugar de medir tamaños de archivos, es posible que necesites determinar el número de líneas, palabras o caracteres en un archivo de texto. Si es así, el cmdlet Measure-Object tiene muchos otros parámetros para medir el contenido de archivos de texto.

Ejecuta el código a continuación para realizar la siguiente medida del contenido del archivo de texto (Measure-Object) por -Character, -Line y -Word, y muestra los resultados (Write-Host).

Asegúrate de cambiar los valores de las variables $file_path y $file_content con tus preferidos.

# Define la ruta del archivo y el contenido
$file_path = "C:\Temp\measure-object.txt"
$file_content = "One fish, two fishes, three fishes"

# Crea el archivo en la ruta y con el contenido definidos
Set-Content -Path $file_path -Value $file_content

# Mide el contenido del archivo de texto
$measurements = Get-Content -Path $file_path | Measure-Object -Character -Line -Word

# Muestra las medidas en la consola
Write-Host "The file '$file_path' contains $($measurements.Lines) lines, $($measurements.Words) words, and $($measurements.Characters) characters."
Measuring text file contents

Medición de Valores Booleanos

Los valores booleanos son valores que solo pueden ser verdaderos o falsos. En PowerShell, los valores booleanos se utilizan a menudo para controlar el flujo de un script, determinar una condición (verdadero o falso) o indicar el éxito o fracaso de un comando.

Medir valores booleanos puede ser útil en varios escenarios, como:

  • Contar la cantidad de valores verdaderos o falsos en un conjunto de datos.
  • Determinar el porcentaje de valores verdaderos en relación con el número total de valores.

Esta información puede ayudar a tomar decisiones acertadas en el procesamiento o análisis de datos.

Para ver cómo funciona la medición de valores booleanos:

Ejecuta los siguientes comandos para contar la suma de valores booleanos (valores verdaderos por defecto) en el array (`$values`).

# Define un array de valores booleanos ($true y $false).
$values = $true,$false,$false,$true,$true,$true,$false,$false,$true
# Mide (cuenta) los valores booleanos (valores verdaderos por defecto).
$values | Measure-Object -Sum

A continuación, el total de la Cuenta de los valores booleanos es nueve (9), mientras que la Suma es cinco (5) ya que solo se cuentan los valores verdaderos.

¿Y los valores falsos? Sigue al siguiente paso y ejecuta algunos comandos más.

Counting the number of true values in an array

Ahora, ejecuta el código a continuación para restar la suma de los valores verdaderos (`$trueCount`) del total de valores booleanos contados (`$count`). La diferencia de la ecuación es el total de valores falsos (`$falseCount`).

# Obtén el conteo total de valores booleanos en un array
$count = $values.Count
# Obtén la suma de valores verdaderos
$trueCount = ($values | Measure-Object -Sum).Sum
# Resta el total de valores verdaderos del total de valores booleanos
# para obtener el total de los valores falsos
$falseCount = $count - $trueCount
# Muestra los conteos totales de valores verdaderos y falsos
Write-Host "Number of true values: $trueCount"
Write-Host "Number of false values: $falseCount"
Counting the number of false values

Si medir valores booleanos es una tarea diaria, puedes crear una función que puedas llamar en cualquier momento para ejecutar la tarea.

Medición de Hashtables

Las Hashtables en PowerShell (una colección de pares clave-valor) te permiten almacenar y recuperar datos de manera rápida y eficiente. Si necesitas el número de elementos en una hashtable o los valores máximo y mínimo, deja que el cmdlet Measure-Object mida tus hashtables.

Ejecuta los comandos a continuación para encontrar los valores -Mínimo y -Máximo de la propiedad Num en tu hashtable ($MyHashtable).

# Crea una hashtable que contenga tres hashtables, cada una con una propiedad Num.
$MyHashtable = @(@{Num=10}, @{Num=20}, @{Num=30})
# Mide la propiedad Num de la hashtable por mínimo y máximo.
$Stats = $MyHashtable | Measure-Object -Minimum -Maximum Num
# Muestra las mediciones de la hashtable
$Stats
Measuring hashtables

Medición de Desviaciones Estándar

Revisar conjuntos de datos puede ser tedioso, pero no tiene por qué serlo. Medir la desviación estándar es útil para entender la distribución de los valores del conjunto de datos. También puedes identificar cualquier valor atípico o punto de datos inusual que afecte los resultados.

La desviación estándar mide la variación o dispersión de los valores del conjunto de datos respecto al valor medio (promedio). Esta medida se calcula encontrando la raíz cuadrada de la varianza de los datos, que es el promedio de las diferencias al cuadrado respecto al promedio.

Ejecuta el código a continuación para calcular y mostrar el -Promedio y la -DesviaciónEstándar de un conjunto de números almacenados en la variable $Numbers.

# Define un conjunto de números
$Numbers = 10, 20, 30, 40, 50

# Calcula el promedio y la desviación estándar de los números
$Average = ($Numbers | Measure-Object -Average).Average
$StdDev = ($Numbers | Measure-Object -StandardDeviation).StandardDeviation

# Muestra los resultados
"Average: $Average"
"Standard deviation: $StdDev"

En estadística, la media mide la tendencia central, describiendo el valor típico o más representativo de un conjunto de datos.

El promedio se calcula sumando todos los números en un conjunto de datos y dividiendo por el número total de valores. En este ejemplo, el conjunto de datos es {10, 20, 30, 40, 50} con una suma de 150, y hay cinco números (5) en el conjunto.

Por lo tanto, se calcula el promedio a continuación, que es 30.

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

Por otro lado, la desviación estándar mide la dispersión de un conjunto de datos. La desviación estándar se calcula de la siguiente manera:

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

Conclusión

Medir datos es una tarea esencial, y el cmdlet Measure-Object de PowerShell es una herramienta poderosa para completar la tarea. Y en este tutorial, has aprendido cómo medir datos de muchas maneras. Ya sea que estés trabajando con archivos, contenidos de archivos de texto, valores booleanos, cadenas, matrices o tablas hash, medirlos puede proporcionar ideas valiosas.

Ahora, puedes calcular fácilmente los valores promedio, máximo y mínimo de tus datos y medir la variación o dispersión de tus datos. Con estas características, puedes obtener una comprensión más profunda de tus datos y tomar decisiones informadas basadas en tu análisis.

Con este conocimiento recién adquirido, ¿por qué no ampliar tu conjunto de herramientas de PowerShell y agregar Compare-Object a tu arsenal?

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