- O Measure-Command permite medir a duração precisa de scripts e comandos
- Get-Process e Get-Date podem calcular o tempo parte ativa de um processo
- É possível extrair dados como CPU, RAM e usuário que iniciou o processo
- Processos remotos podem ser monitorados e o envio de resultados automatizado.
Meça o tempo de execução de um comando em PowerShell Pode parecer uma tarefa técnica reservada a administradores ou desenvolvedores, mas a verdade é que com algumas linhas de código você pode obter dados muito úteis sobre o desempenho de seus scripts e processos. PowerShell oferece diversas ferramentas para facilitar essa tarefa e otimizar suas tarefas automatizadas.
Usar Measure-Command, a ferramenta nativa do PowerShell
O PowerShell vem com o padrão Comando de medição, projetado especificamente para medir quanto tempo leva uma expressão ou escrita para ser executado. Você só precisa encapsular o código em um bloco de chaves {}.
Exemplo básico:
Measure-Command { Get-Process }
Este comando retorna um Objeto TimeSpan com informações como dia, horas, minutos, segundos, milissegundos y Carrapatos.
Também pode ser usado com scripts salvos em arquivos:
Measure-Command { C:\Scripts\MiScript.ps1 }
É especialmente útil para comparar o tempo entre diferentes scripts ou execuções.
Obtenha o tempo desde o início de um processo
Outra opção eficaz é através Get-Process para obter o Hora de início de um processo e calcular a diferença em relação ao tempo atual, assim:
(Get-Date).Subtract((Get-Process nombreProceso).StartTime)
Este método permite determinar há quanto tempo um processo está ativo, por exemplo:
(Get-Date).Subtract((Get-Process CalculatorApp).StartTime)
Para mostrar apenas os minutos de execução, você pode usar:
$Fecha1 = (Get-Process CalculatorApp).StartTime
$Fecha2 = Get-Date
($Fecha2 - $Fecha1).TotalMinutes
Extraia dados adicionais do processo: usuário, RAM, CPU
O PowerShell também permite que você enriqueça as informações do processo obtendo detalhes como usuário quem executou o processo, uso de RAM, CPU e o nome da maquina. Para ampliar seu conhecimento sobre como medir o tempo de execução de um comando no PowerShell, é recomendável consultar este Análise de otimização de tempo de execução do .NET.
$proceso = Get-Process CalculatorApp
$tiempo = (Get-Date).Subtract($proceso.StartTime)
$usuario = (Get-WmiObject Win32_Process | Where-Object { $_.ProcessName -match "CalculatorApp" }).GetOwner().User
$cpu = $proceso.CPU
$ram = $proceso.WorkingSet64 / 1MB
$equipo = ::GetHostName()
Com esses dados, você pode criar scripts de monitoramento com mais precisão e enviá-los por e-mail ou integrá-los às tarefas agendadas.
Análise de eventos: quando um aplicativo começou ou terminou
Caso o requerimento já tenha sido concluído, você ainda pode verificar em o Visualizador de Eventos registros com identificadores 4688 (início do processo) e 4689 (fim do processo), desde que a auditoria esteja habilitada nas políticas de grupo. Para entender como automatizar essas tarefas, você também pode consultar este artigo sobre o Microsoft Flow.
Medir o tempo de execução em computadores remotos
Para ambientes corporativos, é útil medir remotamente a atividade de aplicativos em outras máquinas, por exemplo:
(Get-Date) - (Get-CimInstance Win32_OperatingSystem -ComputerName Nombre_PC).LastBootUpTime
Este comando indica há quanto tempo a máquina remota está ativa e pode ser combinado com Get-Process o WMI para detalhes mais específicos sobre como explicar tudo isso, consulte como medir o tempo que leva para executar um comando no PowerShell.
Comparar desempenho entre comandos
O PowerShell facilita a comparação de diferentes métodos, medindo o tempo de execução de cada um, permitindo que você otimize seus scripts. Por exemplo:
Measure-Command { Get-ChildItem -Path C:\Windows\*.txt -Recurse }
Measure-Command { Get-ChildItem C:\Windows -Filter "*.txt" -Recurse }
Dessa forma, você pode determinar qual opção é mais eficiente para sua tarefa específica.
Evitando erros comuns de medição
Ao salvar os resultados em arquivos, por exemplo, em arquivos .txt, você deve excluir esses arquivos da verificação para evitar loops infinitos. Um exemplo:
gc *.txt -exclude resultado.txt > resultado.txt
Caso contrário, o script pode continuar a incluir sua própria saída, causando um crescimento exponencial de dados.
Medir o tempo a partir da linha de comando clássica (CMD)
Embora esta abordagem pertença a CMD, também é possível medir tempos com scripts .bat: Para se aprofundar em como o tempo de execução pode ser medido em diferentes ambientes, confira isto artigo relacionado.
Este método calcula a diferença entre o horário de início e término da execução do comando, exibindo o resultado no formato HH:MM:SS.MS.
Redirecionar resultados para logs ou e-mail
Para um monitoramento completo, crie scripts que meçam processos periodicamente e enviem alertas por e-mail usando TLS. Isso pode ser útil para isso.
Esta técnica é especialmente útil para servidores Windows que exigem monitoramento constante do status do sistema e como medir o tempo necessário para executar um comando no PowerShell.
A combinação de Comando de medição, Get-Process, WMI e cálculos com datas permitem que você crie tudo, desde análises simples até relatórios avançados para otimizar o uso de recursos e melhorar o gerenciamento de desempenho.
Escritor apaixonado pelo mundo dos bytes e da tecnologia em geral. Adoro compartilhar meu conhecimento por meio da escrita, e é isso que farei neste blog, mostrar a vocês tudo o que há de mais interessante sobre gadgets, software, hardware, tendências tecnológicas e muito mais. Meu objetivo é ajudá-lo a navegar no mundo digital de uma forma simples e divertida.