Batch para apagar un rango de puestos de trabajo, antes comprobar si están encendidos

Tengo el siguiente script

@echo off
Title APAGAR PUESTOS
Color E4
set apagar=shutdown /s /f /t 00 /m
FOR /L %%n IN (1, 1, 7) DO (%apagar% \\172.16.1.%%n)

Básicamente apagar el rango de ip que van desde 172.16.1.1 al 172.16.1.7, pero en ocasiones algún puesto puede que esté apagado, en ese caso me gustaría poder saber cómo comprobarlo, pensé en hacer un ping corto para comprobarlo

Ping 172.16.1.1 -n 2

y si dá como respuesta

Host de destino inaccesible

que el batch ignore ese puesto y si el mensaje es igual o similar a

bytes=32 tiempo<1m TTL=128

que envíe la orden de apagarlo.

Ahora es sólo una manera que se me ocurre de comprobar si está o no encendido, si hay otra mejor obviamente que acepto la sugerencia.

Respuesta
1

Pues no se me ocurre nada mejor para determinar la situación del equipo candidato al apagado. Lo cierto es que tampoco importa mucho intentar apagar un equipo que no está en red pero puede que retrase la ejecución de todo el proceso. Supongo que sabes como decidir si envías o no el shutdown. Por si acaso te sugiero esta versión de tu FOR:

FOR /L %%n IN (1, 1, 7) DO (ping 172.16.1.%%n -n 2| find "TTL" > nul&& %apagar% \\172.16.1.%%n)

No sé si conoces el "&&" (y el "||"). Son unos trucos muy elegantes para tratar el valor del ERRORLEVEL.

Te cuento que coloco así tal cual

@echo off
set restart=shutdown /r /f /t 00 /m
echo Reiniciando PCs de los CONTROLES
FOR /L %%n IN (17, 1, 18) DO (ping 172.16.1.%%n -n 2| find "TTL" > nul&& %restart% \\172.16.1.%%n)

Pero queda sin hacer nada, pero lo extraño es que hice esto en el cmd

set restart=shutdown /r /f /t 00 /m
FOR /L %n IN (17, 1, 18) DO (ping 172.16.1.%n -n 2| find "TTL" > nul&& %restart% \\172.16.1.%n)

y si funciona, en qué podria estar fallando?

No lo entiendo. Pero ayer, cuando antes de contestar estuve probando, también me pasó algo raro. El BAT devolvía el control inmediatamente sin hacer nada. Al ponerle ECHOs de depuración seguía sin salir nada. Finalmente creo que comenté el @ECHO OFF y empezó a salir algo. Luego lo descomenté y ya salía todo bien. Pero hoy no consigo reproducir esa situación (que apuntaría a algún carácter raro no visible en la línea del ECHO OFF).
Pero sería un poco extraño que te hubiera pasado lo mismo.

Prueba a poner en el BAT la línea

FOR /L %%n IN (17, 1, 18) DO (ping 172.16.1.%%n -n 2| find "TTL" > nul&& echo %restart% \\172.16.1.%%n)

que, en lugar de ejecutar el comando simplemente lo presenta, a ver que pasa.

¿Cómo ejecutas el BAT? ¿Directamente desde el explorador de Windows? Si fuera así, ponle un PAUSE al final para poder ver la ventana antes de que se cierre.

Bien, si la verdad que es algo raro, de hecho me puse a mover algunas cosas para determinar a partir de lugar del batch se podría estar generando el problema, que dicho sea de paso con el echo on incluso no dejaba ver nada. Entre una prueba y sin ningún resultado favorable, en un momento dejé todo tal cual me pasaste en un primer momento y anduvo bien... me confunde de todas formas, es el mismo error que describes sin que muestre resultado, porque quedaba todo negro y no llegaba ni siquiera al pause como para tener un indicio de cómo llegó todo a esa parte. De todas maneras y funciona, como o porque no tengo idea la verdad. la cosa es que quedó así:

FOR /D %%i IN (11, 13, 14, 17, 18, 40, 41) DO (ping 172.16.1.%%i -n 2| find "TTL" > nul&& %restart% \\172.16.1.%%i)

y funcionando, incluso con la primera respuesta que me diste.

FOR /L %%n IN (1, 1, 7) DO (ping 172.16.1.%%n -n 2| find "TTL" > nul&& %apagar% \\172.16.1.%%n)

Conclusión, quedó funcionando correctamente.

Te agradezco nuevamente por tu tiempo.

Pues por lo que cuentas sí que es algo muy parecido a lo que me pasó a mí. Supongo que no volverá a ocurrirte pero si fuera así estoy muy interesado en investigarlo. De modo que, si te parece bien, en caso de que se produjera de nuevo algo parecido me gustaría tener el bat para intentar encontrar la razón (estoy convencido de lo que decía, la presencia de algún carácter extraño no visible en la primera línea del archivo, pero para eso tendría que conseguir reproducirlo). Y si por casualidad tienes una copia de ese BAT fallido sería estupendo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas