Automatización de Wake-on-LAN: Debugging y Optimizando un Batch Script

La automatización de tareas en red es un campo fascinante, especialmente cuando se trata de interactuar con hardware antiguo o específico. En este caso, estamos trabajando para crear una herramienta capaz de detectar cuándo un equipo está apagado y enviarle la señal correcta para que despierte automáticamente.

Esquema técnico que muestra la lógica de un script batch para automatizar el despertar de equipos mediante ping y WOL.
Diagrama visual del proceso de automatización Wake-on-LAN y su ciclo de bucles.

Para lograr esto, utilizamos un archivo batch en Windows. La lógica inicial es bastante directa: el script ejecuta una solicitud Ping a la dirección IP objetivo. Si el equipo responde, todo está bien y el proceso termina. Sin embargo, si no hay respuesta, necesitamos enviar un paquete mágico conocido como Wake-on-LAN (WOL) para intentar despertarlo.

Uno de los primeros desafíos fue implementar la capacidad de registro. Queremos saber exactamente cuándo se produce cada acción, por lo que integramos un sistema de logs con timestamps. Esto nos permite ver en tiempo real si el ping falló y si el comando WOL se ejecutó correctamente.

Con el tiempo, descubrimos una limitación importante en la detección de errores dentro del intérprete de comandos. Al principio, intentamos confiar en la variable `%errorlevel%` para determinar si el ping fue exitoso o no. Sin embargo, nos dimos cuenta de que esta variable a menudo devuelve un valor fijo o obsoleto, lo que hace que la lógica sea inestable y propensa a errores.

Para solucionar esto, refinamos nuestro enfoque en el script. En lugar de depender del estado genérico, cambiamos la detección para buscar específicamente la cadena «TTL=» dentro de la respuesta del ping. Esto garantiza que solo se envíe un paquete WOL si realmente hay una confirmación de red.

Finalmente, aplicamos una optimización clave: limitamos cuántas veces enviamos el comando WOL en relación con los intentos de ping. Este ajuste evita bombardear la red innecesariamente y asegura que el sistema sea más eficiente al esperar a que el equipo despierte.

Vista clara del código batch optimizado para detectar respuestas TTL y el log generado durante la ejecución.
Visualización del script final optimizado junto con su correspondiente archivo de registro.

A continuación, te presento los scripts refinados y el ejemplo del log generado por esta solución robusta.

@echo off
set IP=192.168.1.50
set MAC=00:11:22:33:44:55
set BROADCAST=192.168.1.255
set PORT=9
set LOG=wol_ping_log.txt

echo =============================== >> %LOG%
echo Inicio: %date% %time% >> %LOG%

:loop
echo [%date% %time%] Probando ping a %IP%...
echo [%date% %time%] Ping a %IP% >> %LOG%

ping -n 1 %IP% | find "TTL=" >nul

if errorlevel 1 (
    echo [%date% %time%] No responde. Enviando WOL... >> %LOG%
    echo No responde. Enviando WOL...
    wolcmd %MAC% %BROADCAST% 255.255.255.0 %PORT%
    
    echo [%date% %time%] Esperando 10 segundos... >> %LOG%
    timeout /t 10 >nul
    goto loop
)

echo [%date% %time%] El equipo respondio. >> %LOG%
echo Equipo disponible.
echo [%date% %time%] Equipo disponible. >> %LOG%

:end
pause

Este enfoque nos permite tener un control preciso sobre la interacción con el hardware y la red, transformando una tarea compleja en una solución automatizada y confiable.