- Measure-Command permite medir la duración precisa de scripts y comandos
- Get-Process y Get-Date pueden calcular el tiempo activo de un proceso
- Es posible extraer datos como CPU, RAM y usuario que lanzó el proceso
- Se pueden monitorizar procesos remotos y automatizar el envío de resultados
Medir el tiempo de ejecución de un comando en PowerShell puede parecer una tarea técnica reservada a administradores o desarrolladores, pero lo cierto es que con un par de líneas de código puedes obtener datos muy útiles sobre el rendimiento de tus scripts y procesos. PowerShell ofrece diversas herramientas para facilitar esta tarea y optimizar tus tareas automatizadas.
Usar Measure-Command
, la herramienta nativa de PowerShell
PowerShell incorpora por defecto Measure-Command, diseñada específicamente para medir cuánto tarda una expresión o script en ejecutarse. Solo debes encapsular el código en un bloque de llaves {}
.
Ejemplo básico:
Measure-Command { Get-Process }
Este comando devuelve un objeto TimeSpan con información como días, horas, minutos, segundos, milisegundos y ticks.
También puede usarse con scripts guardados en archivos:
Measure-Command { C:\Scripts\MiScript.ps1 }
Es especialmente útil para comparar los tiempos entre diferentes scripts o ejecuciones.
Obtener el tiempo desde el inicio de un proceso
Otra opción efectiva es mediante Get-Process para obtener el StartTime de un proceso y calcular la diferencia respecto a la hora actual, así:
(Get-Date).Subtract((Get-Process nombreProceso).StartTime)
Este método permite determinar cuánto tiempo lleva activo un proceso, por ejemplo:
(Get-Date).Subtract((Get-Process CalculatorApp).StartTime)
Para mostrar solo los minutos que ha estado en ejecución, puedes usar:
$Fecha1 = (Get-Process CalculatorApp).StartTime
$Fecha2 = Get-Date
($Fecha2 - $Fecha1).TotalMinutes
Extraer datos adicionales de proceso: usuario, RAM, CPU
PowerShell también permite enriquecer la información del proceso obteniendo detalles como usuario que ejecutó el proceso, uso de RAM, CPU y el nombre de la máquina. Para ampliar el conocimiento sobre cómo medir el tiempo que tarda en ejecutarse un comando en PowerShell, es recomendable consultar este revisión de optimización del tiempo de ejecución en .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()
Con estos datos puedes construir scripts de monitorización con mayor precisión y enviarlos por correo o integrarlos en tareas programadas.
Análisis de eventos: cuándo inició o terminó una aplicación
Si la aplicación ya ha finalizado, aún puedes consultar en el Visor de eventos los registros con identificadores 4688 (inicio del proceso) y 4689 (fin del proceso), siempre que tengas activada la auditoría en las políticas de grupo. Para entender cómo automatizar estas tareas, también puedes consultar este artículo sobre Microsoft Flow.
Medir tiempo de ejecución en computadoras remotas
Para entornos empresariales, es útil medir la actividad de aplicaciones en otras máquinas de forma remota, por ejemplo:
(Get-Date) - (Get-CimInstance Win32_OperatingSystem -ComputerName Nombre_PC).LastBootUpTime
Este comando indica cuánto tiempo lleva activa la máquina remota, y puede combinarse con Get-Process o WMI para obtener detalles más específicos sobre cómo explicar todo esto se relaciona con cómo medir el tiempo que tarda en ejecutarse un comando en PowerShell.
Comparar rendimiento entre comandos
PowerShell facilita la evaluación comparativa entre diferentes métodos midiendo cuánto tarda cada uno en ejecutarse, permitiendo así optimizar tus scripts. Por ejemplo:
Measure-Command { Get-ChildItem -Path C:\Windows\*.txt -Recurse }
Measure-Command { Get-ChildItem C:\Windows -Filter "*.txt" -Recurse }
De esta manera, puedes determinar qué opción es más eficiente para tu tarea concreta.
Evitar errores comunes en la medición
Al guardar los resultados en archivos, por ejemplo en archivos .txt, debes asegurarte de excluir estos archivos del análisis para evitar bucles infinitos. Un ejemplo:
gc *.txt -exclude resultado.txt > resultado.txt
De lo contrario, el script podría seguir incluyendo su propia salida, provocando un crecimiento exponencial de los datos.
Medir tiempo desde línea de comandos clásica (CMD)
Aunque este enfoque pertenece a CMD, también es posible medir tiempos con scripts .bat: para profundizar en cómo se puede medir el tiempo de ejecución en diferentes entornos, consulte este artículo relacionado.
Este método calcula la diferencia entre tiempo de inicio y fin de la ejecución del comando, mostrando el resultado en formato HH:MM:SS.MS.
Redirigir resultados a logs o correo
Para realizar un seguimiento completo, crea scripts que periódicamente midan procesos y envíen alertas por email mediante TLS: para ello, esta puede ser de utilidad.
Esta técnica es especialmente útil para servidores Windows que requieran un monitoreo constante del estado del sistema y cómo medir el tiempo que tarda en ejecutarse un comando en PowerShell.
La combinación de Measure-Command, Get-Process, WMI y cálculos con fechas permite crear desde análisis simples hasta informes avanzados para optimizar el uso de recursos y mejorar la gestión del rendimiento.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.