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 cmdlet Measure-Object do PowerShell está à altura da tarefa.

Neste tutorial, você aprenderá o poder do cmdlet Measure-Object na automatizaçã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 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 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 recursivamente. Se sim, adicione o parâmetro -Recurse, como mostrado abaixo. Get-ChildItem -Recurse | Measure-Object

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

Get-ChildItem -Directory | Measure-Object

Como você pode ver abaixo, o 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 o seu sistema, já que arquivos grandes afetam o desempenho do sistema. Além de contar propriedades, você também pode medir o comprimento e tamanho dos 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) os 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 dos arquivos, tamanho médio dos arquivos, a soma dos tamanhos dos arquivos e o número total de arquivos.

# Definir o limiar para o tamanho médio do arquivo
$threshold = 5000000 
# Medir 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)"

# Verificar se o tamanho médio do arquivo está acima ou abaixo do limiar
if ($files.Average -ge $threshold) {
    # Se o tamanho médio do arquivo estiver acima do limiar, reproduzir um som agudo
    [console]::beep(1000, 500)
} else {
    # Se o tamanho médio do arquivo estiver abaixo do limiar, reproduzir 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 o seu forte. 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) o 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 exibir (`Write-Host`) as medidas.

Certifique-se de alterar os valores das variáveis `$file_path` e `$file_content` com os de sua preferência.

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

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

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

# Exibir 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 apenas 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 vários cenários, 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 a medição de valores booleanos funciona:

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

# Defina um array de valores booleanos ($verdadeiro e $falso).
$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) já que apenas os valores verdadeiros são contados.

E os valores falsos? Vamos para o próximo passo, 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 (`$verdadeiroContagem`) da contagem total dos valores booleanos (`$contagem`). A diferença da equação é o total dos valores falsos (`$falsoContagem`).

# Obtenha a contagem total dos valores booleanos em um array
$count = $values.Count
# Obtenha a soma dos valores verdadeiros
$trueCount = ($values | Measure-Object -Sum).Sum
# Subtraia o total dos valores verdadeiros do total dos valores booleanos
# para obter o total dos valores falsos
$falseCount = $count - $trueCount
# Exiba as contagens totais dos 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 chamar 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 precisar do número de itens em um hashtable ou dos valores máximo e mínimo, deixe o cmdlet Measure-Object medir seus hashtables.

Execute os comandos abaixo para encontrar os valores -Mínimo e -Máximo da propriedade Num em seu hashtable ($MyHastable).

# Crie um hashtable contendo três hashtables, cada um com uma propriedade Num.
$MyHashtable = @(@{Num=10}, @{Num=20}, @{Num=30})
# Meça a propriedade Num do hashtable por mínimo e máximo.
$Stats = $MyHashtable | Measure-Object -Minimum -Maximum Num
# Exiba as medições do 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 compreender a distribuição dos valores do conjunto de dados. Você também pode identificar quaisquer valores discrepantes ou pontos de dados incomuns que afetam 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 ao quadrado 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 armazenada na variável $Numbers.

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

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

# Exiba 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 somando 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 a propagaçã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 Measure-Object do PowerShell é uma ferramenta poderosa para completar a tarefa. E neste tutorial, você aprendeu como medir dados de várias maneiras. Esteja você 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 mesmos. 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 este conhecimento recém-adquirido, por que não expandir seu toolkit do PowerShell e adicionar Compare-Object ao seu arsenal?

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