PowerShell Measure-Object: Um Guia Completo com Exemplos

Contar ou calcular propriedades numéricas de objetos, como caracteres, palavras e linhas em objetos de string, pode ser exasperante. Felizmente, o PowerShell Measure-Object cmdlet está à altura da tarefa.

Neste tutorial, você aprenderá o poder do cmdlet Measure-Object na automação da medição de propriedades de objetos no PowerShell.

Mergulhe de cabeça para aprimorar suas habilidades de medição de objetos!

Pré-requisitos

Este tutorial é uma demonstração prática. Para acompanhar, você precisará de um sistema com o PowerShell instalado. Este tutorial utiliza o Windows 10 com o PowerShell v7.

Contagem de Arquivos e Pastas

Saber o número de arquivos e pastas em um diretório pode ser útil em vários cenários. Um exemplo é quando você precisa monitorar o tamanho de uma pasta ou verificar o número de arquivos em um diretório.

O cmdlet Measure-Object conta o número de arquivos e pastas em um diretório. A contagem exata ajuda a gerenciar e otimizar melhor os recursos do seu sistema.

Para ver como o cmdlet Measure-Object funciona na contagem de arquivos e pastas:

1. Abra o PowerShell e execute o seguinte comando Get-ChildItem para contar e retornar o total de arquivos e pastas coletivamente (Measure-Object) no seu diretório atual.

Get-ChildItem | Measure-Object

A saída abaixo indica 4852 arquivos e pastas no diretório atual.

Counting the files and folders in the current directory

Talvez você queira incluir todos os arquivos e subdiretórios na árvore de diretórios de forma recursiva. Se for o caso, adicione o parâmetro -Recurse, como mostrado abaixo. Get-ChildItem -Recurse | Measure-Object

2. Em seguida, execute o mesmo comando abaixo como fez no primeiro passo. Mas desta vez, adicione o parâmetro -Directory para contar apenas o total de diretórios no diretório de trabalho.

Get-ChildItem -Directory | Measure-Object

Como você pode ver abaixo, a contagem total agora é menor (135), já que o comando contou apenas diretórios, excluindo todos os outros objetos.

Counting the number of directories in the current directory

3. Agora, execute o comando abaixo para contar os arquivos executáveis (.exe) no seu diretório atual.

O parâmetro -Filter informa ao cmdlet Get-ChildItem para filtrar os resultados e retornar apenas os arquivos com a extensão que você especificar (ou seja, *.txt, *.jpg, *.csv).

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

Medindo Tamanhos de Arquivos

Medir comprimentos e tamanhos de objetos pode ajudar a gerenciar melhor seu sistema, já que arquivos grandes afetam o desempenho do sistema. Além de contar propriedades, você também pode medir o comprimento e o tamanho de objetos através do cmdlet Measure-Object.

Execute o código abaixo para recuperar todos os arquivos no diretório atual (Get-ChildItem) e exibir (Write-Host) seus respectivos comprimentos em bytes por padrão.

O código abaixo imprime cada medida no console, incluindo os tamanhos mínimo e máximo de arquivo, tamanho médio de arquivo, a soma dos tamanhos de arquivo e o número total de arquivos.

# Defina o limite para o tamanho médio de arquivo
$threshold = 5000000 
# Meça o tamanho de cada arquivo no diretório atual
$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)"

# Verifique se o tamanho médio de arquivo está acima ou abaixo do limite
if ($files.Average -ge $threshold) {
    # Se o tamanho médio de arquivo estiver acima do limite, reproduza um som agudo
    [console]::beep(1000, 500)
} else {
    # Se o tamanho médio de arquivo estiver abaixo do limite, reproduza um som grave
    [console]::beep(500, 500)
}

Abaixo, você pode ver os tamanhos exibidos em bytes.

Measuring file sizes

Talvez colar o código no console não seja sua praia. Se for o caso, salve o código em um arquivo de script do PowerShell e execute-o.

Agora, execute os seguintes comandos para obter um arquivo no diretório atual, onde (Where-Object) seu tamanho ($_.Length) é igual (-eq) ao tamanho máximo do arquivo ($files.Maximum).

# Obtenha e armazene o arquivo do mesmo tamanho que $files.Maximum
$max = Get-ChildItem | Where-Object -FilterScript {$_.Length -eq $files.Maximum}
# Exiba o valor do tamanho máximo ($files.Maximum) e o arquivo com esse tamanho
Write-Host "Maximum file size: $($files.Maximum) bytes `nFile: $max"

A saída abaixo mostra o nome do arquivo mais extenso no diretório atual.

Getting the most extensive file in size

Medindo o Conteúdo de Arquivos de Texto

Em vez de medir tamanhos de arquivos, você pode precisar determinar o número de linhas, palavras ou caracteres em um arquivo de texto. Se for o caso, o cmdlet Measure-Object tem muitos outros parâmetros para medir o conteúdo de arquivos de texto.

Execute o código abaixo para realizar a seguinte medida do conteúdo do arquivo de texto (Measure-Object) por -Character, -Line e -Word, e exiba (Write-Host) as medidas.

Assegure-se de alterar os valores das variáveis $file_path e $file_content com os valores desejados.

# Defina o caminho e o conteúdo do arquivo
$file_path = "C:\Temp\measure-object.txt"
$file_content = "One fish, two fishes, three fishes"

# Crie o arquivo no caminho e com o conteúdo definidos
Set-Content -Path $file_path -Value $file_content

# Meça o conteúdo do arquivo de texto
$measurements = Get-Content -Path $file_path | Measure-Object -Character -Line -Word

# Exiba as medidas no console
Write-Host "The file '$file_path' contains $($measurements.Lines) lines, $($measurements.Words) words, and $($measurements.Characters) characters."
Measuring text file contents

Medindo Valores Booleanos

Valores booleanos são valores que podem ser verdadeiros ou falsos. No PowerShell, valores booleanos são frequentemente usados para controlar o fluxo de um script, determinar uma condição (verdadeira ou falsa) ou indicar o sucesso ou falha de um comando.

Medir valores booleanos pode ser útil em diversos cenários, tais como:

  • Contar o número de valores verdadeiros ou falsos em um conjunto de dados.
  • Determinar a porcentagem de valores verdadeiros em relação ao número total de valores.

Essas informações podem ajudar a tomar decisões sólidas no processamento ou análise de dados.

Para ver como medir valores booleanos funciona:

Execute os seguintes comandos para contar a soma dos valores booleanos (valores verdadeiros por padrão) no array ($values).

# Defina um array de valores booleanos ($true e $false).
$values = $true,$false,$false,$true,$true,$true,$false,$false,$true
# Meça (conte) os valores booleanos (valores verdadeiros por padrão).
$values | Measure-Object -Sum

Abaixo, o total Contagem dos valores booleanos é nove (9), enquanto a Soma é cinco (5), pois apenas os valores verdadeiros são contados.

E quanto aos valores falsos? Pule para a etapa seguinte e execute mais alguns comandos.

Counting the number of true values in an array

Agora, execute o código abaixo para subtrair a soma dos valores verdadeiros ($trueCount) do total de contagem de valores booleanos ($count). A diferença da equação é o total de valores falsos ($falseCount).

# Obtenha o total de contagem de valores booleanos em um array
$count = $values.Count
# Obtenha a soma dos valores verdadeiros
$trueCount = ($values | Measure-Object -Sum).Sum
# Subtraia o total de valores verdadeiros do total de valores booleanos
# para obter o total de valores falsos
$falseCount = $count - $trueCount
# Exiba as contagens totais de valores verdadeiros e falsos
Write-Host "Number of true values: $trueCount"
Write-Host "Number of false values: $falseCount"
Counting the number of false values

Se medir valores booleanos é uma tarefa diária, você pode criar uma função que pode ser chamada a qualquer momento para executar a tarefa.

Medindo Hashtables

Hashtables no PowerShell (uma coleção de pares chave-valor) permitem que você armazene e recupere dados de forma rápida e eficiente. Se você precisa do número de itens em uma hashtable ou dos valores máximo e mínimo, deixe o cmdlet Measure-Object medir suas hashtables.

Execute os comandos abaixo para encontrar os valores -Minimum e -Maximum da propriedade Num em sua hashtable ($MyHastable).

# Crie uma hashtable contendo três hashtables, cada uma com uma propriedade Num.
$MyHashtable = @(@{Num=10}, @{Num=20}, @{Num=30})
# Meça a propriedade Num da hashtable pelo mínimo e máximo.
$Stats = $MyHashtable | Measure-Object -Minimum -Maximum Num
# Exiba as medições da hashtable
$Stats
Measuring hashtables

Medindo Desvios Padrão

Revisar conjuntos de dados pode ser confuso, mas não precisa ser. Medir o desvio padrão é útil ao entender a distribuição dos valores do conjunto de dados. Você também pode identificar quaisquer valores atípicos ou pontos de dados incomuns que afetem os resultados.

O desvio padrão mede a variação ou dispersão dos valores do conjunto de dados em relação ao valor médio (média). Essa medida é calculada encontrando a raiz quadrada da variância dos dados, que é a média das diferenças quadradas em relação à média.

Execute o código abaixo para calcular e exibir a -Média e o -DesvioPadrão de uma matriz de números armazenados na variável $Números.

# Definir uma matriz de números
$Numbers = 10, 20, 30, 40, 50

# Calcular a média e o desvio padrão dos números
$Average = ($Numbers | Measure-Object -Average).Average
$StdDev = ($Numbers | Measure-Object -StandardDeviation).StandardDeviation

# Exibir os resultados
"Average: $Average"
"Standard deviation: $StdDev"

Em estatística, a média mede a tendência central, descrevendo o valor típico ou mais representativo de um conjunto de dados.

A média é calculada adicionando todos os números em um conjunto de dados e dividindo pelo número total de valores. Neste exemplo, o conjunto de dados é {10, 20, 30, 40, 50} com uma soma de 150, e cinco números (5) estão no conjunto.

Consequentemente, a média é calculada abaixo, que é 30.

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

Por outro lado, o desvio padrão mede a dispersão ou variação de um conjunto de dados. O desvio padrão é calculado da seguinte forma:

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

Conclusão

Medir dados é uma tarefa essencial, e o cmdlet PowerShell Measure-Object é uma ferramenta poderosa para completar essa tarefa. E neste tutorial, você aprendeu como medir dados de várias maneiras. Seja trabalhando com arquivos, conteúdo de arquivos de texto, valores booleanos, strings, arrays ou hashtables, medir esses dados pode fornecer insights valiosos.

Agora, você pode facilmente calcular os valores médio, máximo e mínimo dos seus dados e medir a variação ou dispersão dos seus dados. Com esses recursos, você pode obter uma compreensão mais profunda dos seus dados e tomar decisões informadas com base na sua análise.

Com esse conhecimento recém-adquirido, por que não expandir seu conjunto de ferramentas do PowerShell e adicionar o Compare-Object ao seu arsenal?

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