O cmdlet Measure-Object é uma ferramenta essencial no PowerShell para realizar operações de agregação e estatística em coleções de objetos. Ele permite calcular rapidamente a contagem, soma, média, valor mínimo e máximo de propriedades numéricas, além de contar linhas, palavras e caracteres em strings. Nesta aula, você aprenderá a utilizar cada um desses recursos com exemplos práticos.

Com Measure-Object, você pode processar a saída de outros cmdlets, arquivos ou arrays, obtendo insights numéricos sem precisar escrever loops complexos. É uma ferramenta de produtividade que simplifica análises ad-hoc no terminal.

Contagem

O parâmetro -Count é o mais básico do Measure-Object. Ele simplesmente conta o número de objetos passados pelo pipeline. É útil para verificar quantos itens uma consulta retorna, por exemplo, quantos arquivos em um diretório ou quantos processos estão em execução.

Exemplo: contar quantos arquivos .txt existem na pasta atual.

Get-ChildItem -Filter *.txt | Measure-Object -Count

A saída será um objeto do tipo Microsoft.PowerShell.Commands.GenericMeasureInfo com a propriedade Count preenchida. Se você quiser apenas o número, pode acessar diretamente a propriedade:

(Get-ChildItem -Filter *.txt | Measure-Object -Count).Count

Também é possível contar linhas, palavras e caracteres em arquivos de texto usando Get-Content com Measure-Object -Line -Word -Character.

Soma e média

Para calcular soma e média, utilize os parâmetros -Sum e -Average. Eles funcionam apenas com propriedades numéricas. Você deve especificar a propriedade a ser medida com o parâmetro -Property.

Exemplo: calcular a soma e a média do tamanho (Length) dos arquivos em uma pasta.

Get-ChildItem | Measure-Object -Property Length -Sum -Average

O resultado incluirá as propriedades Sum, Average, Count (número de objetos com a propriedade), Maximum e Minimum (se solicitados). Note que objetos sem a propriedade especificada são ignorados.

Para somar valores de um array diretamente:

1..10 | Measure-Object -Sum

Isso retorna a soma de 1 a 10 (55).

Estatísticas

Além de soma e média, Measure-Object pode calcular o valor mínimo (-Minimum) e máximo (-Maximum), fornecendo um resumo estatístico completo. Esses parâmetros podem ser combinados.

Exemplo: obter estatísticas completas de uma propriedade numérica.

Get-Process | Measure-Object -Property WorkingSet -Minimum -Maximum -Average -Sum

Isso retorna o menor, maior, média e soma do conjunto de trabalho (memória) de todos os processos. O resultado é um objeto com as propriedades Count, Average, Sum, Maximum, Minimum e Property.

Para propriedades não numéricas, como strings, você pode contar ocorrências usando -GroupBy (não confundir com Group-Object). O parâmetro -GroupBy agrupa objetos por uma propriedade e então aplica as medidas. Exemplo: contar processos por nome de empresa.

Get-Process | Measure-Object -Property Company -GroupBy Company

Isso retorna um objeto para cada empresa, com a contagem de processos associados.

Casos de uso

Measure-Object é amplamente usado em scripts de monitoramento, relatórios e análise de dados. Aqui estão alguns cenários comuns:

  • Monitoramento de desempenho: Calcular a média de uso de CPU ou memória de processos em um intervalo de tempo.
  • Análise de logs: Contar o número de ocorrências de um evento em arquivos de log usando Select-String e Measure-Object.
  • Validação de dados: Verificar se a soma de valores em uma coluna corresponde a um valor esperado.
  • Relatórios de sistema: Gerar estatísticas de arquivos (tamanho total, média, maior arquivo) para relatórios de uso de disco.
  • Automação de tarefas: Decidir se um diretório contém arquivos suficientes para prosseguir com uma operação.

Exemplo prático: calcular o tamanho total de arquivos de log com mais de 30 dias.

Get-ChildItem -Path C:\Logs -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Measure-Object -Property Length -Sum

Isso retorna a soma dos tamanhos dos arquivos antigos, útil para limpeza de disco.

Boas práticas

  • Sempre especifique a propriedade com -Property quando usar -Sum, -Average, -Minimum ou -Maximum para evitar erros.
  • Para contar objetos sem propriedades numéricas, use apenas -Count (ou omita parâmetros, pois o padrão é contar).
  • Combine com Select-Object para extrair apenas as estatísticas desejadas.
  • Use -ErrorAction SilentlyContinue para ignorar objetos que não possuem a propriedade.

Referências

Exercícios

  1. Conte quantos processos estão em execução no seu sistema.

    ✓ Resposta:
    (Get-Process | Measure-Object).Count
  2. Calcule a soma e a média do tamanho (Length) de todos os arquivos no diretório atual.

    ✓ Resposta:
    Get-ChildItem | Measure-Object -Property Length -Sum -Average
  3. Encontre o processo com maior uso de memória (WorkingSet) e o menor.

    ✓ Resposta:
    Get-Process | Measure-Object -Property WorkingSet -Minimum -Maximum
  4. Conte o número de linhas, palavras e caracteres do arquivo "C:\temp\log.txt".

    ✓ Resposta:
    Get-Content C:\temp\log.txt | Measure-Object -Line -Word -Character
  5. Agrupe os processos por empresa (Company) e mostre a contagem de cada grupo.

    ✓ Resposta:
    Get-Process | Measure-Object -Property Company -GroupBy Company