Measure-Object
Esta aula aborda o cmdlet Measure-Object do PowerShell, que permite realizar cálculos estatísticos como contagem, soma, média, mínimo e máximo em coleções de objetos. Serão explorados seus parâmetros principais e casos de uso práticos, com exemplos de código.
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 -CountA 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).CountTambé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 -AverageO 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 -SumIsso 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 -SumIsso 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 CompanyIsso 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-StringeMeasure-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 -SumIsso retorna a soma dos tamanhos dos arquivos antigos, útil para limpeza de disco.
Boas práticas
- Sempre especifique a propriedade com
-Propertyquando usar-Sum,-Average,-Minimumou-Maximumpara evitar erros. - Para contar objetos sem propriedades numéricas, use apenas
-Count(ou omita parâmetros, pois o padrão é contar). - Combine com
Select-Objectpara extrair apenas as estatísticas desejadas. - Use
-ErrorAction SilentlyContinuepara ignorar objetos que não possuem a propriedade.
Referências
- Documentação oficial do Measure-Object
- Coletando informações sobre computadores
- SS64: Measure-Object
- PDQ: PowerShell Measure-Object
- Everything about Measure-Object
Exercícios
Conte quantos processos estão em execução no seu sistema.
✓ Resposta:(Get-Process | Measure-Object).CountCalcule 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 -AverageEncontre o processo com maior uso de memória (WorkingSet) e o menor.
✓ Resposta:Get-Process | Measure-Object -Property WorkingSet -Minimum -MaximumConte 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 -CharacterAgrupe os processos por empresa (Company) e mostre a contagem de cada grupo.
✓ Resposta:Get-Process | Measure-Object -Property Company -GroupBy Company