Medir tiempo de ejecución de comandos y scripts en PowerShell

Última actualización: 14/08/2025
Autor: Isaac
  • 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

Tiempo de ejecución PowerShell

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.

  Guía completa para instalar complementos y extensiones en Microsoft Edge

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.

  No se puede eliminar el álbum de fotos en el iPhone: ¿aprendes a solucionarlo?

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.

Artículo relacionado:
REVISIÓN: Servicio de optimización del tiempo de ejecución de .NET alta CPU

Deja un comentario