Measure-Object
A aula aborda o cmdlet Measure-Object do PowerShell, que permite realizar cálculos estatísticos como contagem, soma, média, máximo e mínimo em coleções de objetos. São explorados seus parâmetros principais, casos de uso práticos e boas práticas para análise de dados.
O cmdlet Measure-Object é uma ferramenta essencial no PowerShell para realizar cálculos estatísticos em coleções de dados. Ele permite contar objetos, somar valores numéricos, calcular médias, e encontrar valores máximos e mínimos, tudo de forma simples e integrada ao pipeline. Nesta aula, você aprenderá a utilizar seus parâmetros principais e aplicá-los em situações reais.
Dominar o Measure-Object é fundamental para quem precisa analisar dados rapidamente, seja contando arquivos em um diretório, calculando totais de vendas ou identificando extremos em conjuntos de números. Com ele, você evita loops manuais e torna seus scripts mais eficientes e legíveis.
Contagem
O parâmetro -Count é o mais básico e simples: ele conta quantos objetos são recebidos pelo pipeline. Isso é útil para saber, por exemplo, quantos arquivos existem em uma pasta, quantos processos estão em execução ou quantos serviços estão parados.
Exemplo: contar arquivos no diretório atual.
Get-ChildItem | Measure-Object -Count
O resultado será um objeto com a propriedade Count contendo o número total de itens. Você pode acessá-la diretamente:
(Get-ChildItem | Measure-Object -Count).Count
Se nenhum parâmetro for especificado, Measure-Object conta os objetos por padrão, mas é boa prática usar -Count explicitamente para clareza.
Soma e média
Para calcular a soma e a média de valores numéricos, utilize os parâmetros -Sum e -Average respectivamente. Esses parâmetros exigem que os objetos possuam uma propriedade numérica, que deve ser especificada com o parâmetro -Property.
Exemplo: somar e calcular a média dos tamanhos de arquivos em bytes.
Get-ChildItem | Measure-Object -Property Length -Sum -Average
O resultado terá as propriedades Sum e Average. Se você quiser apenas a soma ou a média, pode usar apenas um dos parâmetros.
Importante: a propriedade deve ser numérica; caso contrário, o PowerShell tentará converter, o que pode gerar erros. Para valores não numéricos, o cálculo é ignorado.
Estatísticas
Além de soma e média, o Measure-Object pode calcular o valor máximo (-Maximum) e mínimo (-Minimum). Esses parâmetros também exigem uma propriedade numérica e podem ser combinados entre si.
Exemplo: obter o maior e o menor processo em uso de memória (WorkingSet).
Get-Process | Measure-Object -Property WorkingSet -Maximum -Minimum
O resultado exibirá Maximum e Minimum com os respectivos valores. Você também pode combinar todos os parâmetros estatísticos de uma vez:
Get-ChildItem | Measure-Object -Property Length -Sum -Average -Maximum -Minimum
Isso retorna um único objeto com todas as estatísticas calculadas.
Casos de uso
O Measure-Object é amplamente utilizado em scripts de automação e análise. Alguns exemplos práticos:
- Análise de logs: contar linhas de um arquivo de log que contêm uma palavra específica.
- Monitoramento de desempenho: calcular a média de uso de CPU de processos em um intervalo.
- Gerenciamento de arquivos: somar o tamanho total de arquivos de uma pasta para verificar limites de armazenamento.
- Validação de dados: verificar se todos os valores em uma coluna estão dentro de um intervalo usando mínimo e máximo.
Exemplo: contar quantos serviços estão em execução.
Get-Service | Where-Object {$_.Status -eq 'Running'} | Measure-Object -Count
Exemplo: calcular a média de idade de usuários a partir de um CSV.
Import-Csv usuarios.csv | Measure-Object -Property Idade -Average
Esses exemplos mostram como o cmdlet se integra perfeitamente ao pipeline, permitindo análises rápidas sem a necessidade de loops complexos.
Boas práticas
Ao usar Measure-Object, lembre-se de que ele processa todos os objetos do pipeline de uma vez, o que pode consumir memória para coleções muito grandes. Para conjuntos enormes, considere usar filtros no pipeline (com Where-Object) antes de medir. Além disso, sempre verifique se a propriedade especificada existe e é numérica para evitar erros silenciosos.
Referências
- Documentação oficial do Measure-Object
- Trabalhando com coleções no PowerShell
- Sobre pipelines no PowerShell
- Scripts de exemplo para administração
- SS64 - Measure-Object
Exercícios
- Conte quantos processos estão em execução no seu sistema usando
Measure-Object. - Calcule a soma total de memória (WorkingSet) de todos os processos em execução.
- Encontre o arquivo com maior tamanho (Length) no diretório atual.
- Calcule a média de idade de uma lista de pessoas (suponha que você tenha um array de objetos com a propriedade Idade).
- Conte quantos serviços estão com Status 'Stopped' e calcule a soma de seus tempos de início (StartTime, se aplicável).
Get-Process | Measure-Object -Count ou (Get-Process).Count.
Get-Process | Measure-Object -Property WorkingSet -Sum.
Get-ChildItem | Measure-Object -Property Length -Maximum.
$pessoas | Measure-Object -Property Idade -Average.
$servicosParados = Get-Service | Where-Object {$_.Status -eq 'Stopped'}
$servicosParados | Measure-Object -Count
# Para soma de StartTime (se existir):
$servicosParados | Measure-Object -Property StartTime -Sum