Apagar equipo en forma automática.

Todo bien.

Tengo el siguiente problema, necesito apagar equipos con sistema operativo windows 2000 server en forma automática cuando falla el fluido eléctrico. Lo he intentado mediante el siguiente script:

Ping 194.194.8.171 -n 10 || shutdown.exe -s, este pequeño código lo dígito en un archivo con extensión bat, sin embargo no me funciona, cuando el ping falla debería realizar la otra instrucción de apagar el equipo, sin embargo no lo hace.

Que puede estar fallando, aquí lo extraño es que éste mismo código si funciona para windows xp y 7.

1 respuesta

Respuesta
1

No tengo la posibilidad de probar en un equipo con el sistema operativo que indicas.

Supongo que el comando "shutdown -s" funcionará en ese sistema operativo (para comprobarlo bastaría que teclearas "shutdown /?" en una ventana de comando) por lo que lo único que se me ocurre es que no funcione el "||".

Podrías probar con:

Ping 194.194.8.171 -n 10

if errorlevel 1 shutdown.exe -s

Ya me contarás.

He estado buscando información en la red sobre el uso de "||" por si me daba alguna pista y no he encontrado nada. De las pruebas que he hecho deduzco que parece comportarse como "if errorlevel 1" pero me gustaría confirmarlo.

¿Sabes tú dónde podría encontrar información sobre ello?

Todo bien.

El script me hace el ping, pero cuando no me contesta no pasa nada con el "if errorlevel 1 shutdown.exe -s, que debería apagar el equipo. El comando shutdown.exe no viene con el windows 2000 server, hay que copiarlo de un WXP en la misma ruta. Hasta donde se || significa "or",aquí el asunto es el sistema operativo tan antiguo en el cual tengo algunas aplicaciones que debo mantener.

En todo caso si tienes alguna otra idea te lo agradezco.

ok.

En la programación batch de MSDOS no creo ue "||" haga las funciones de un "or" aunque sé que es así en otros "lenguajes de programación". Me inclino, más bien, por la equivalencia con "if errorlevel 1" que querría decir, a grandes rasgos "si la salida del anterior comando fue errónea". En MSDOS si el comando inmediatamente anterior terminó correctamente errorlevel vale cero y en caso contrario valdrá algo distinto de cero.

Pero por lo que dices creo que el problema estará más bien, en el funcionamiento del comando shutdown "importado" de XP. Yo lo probaría directamente en la máquina en la que tienes Windows 2000 Server, desde una ventana de CMD o MSDOS con unas opciones como "shutdown -s -t 300" para que te dé 300 segundos de tiempo para abortar el comando con "shutdown -a". Si responde como se espera te saldrá una ventana emergente con un temporizador decreciente y con el "shutdown -a" podrás abortar el apagado. Si eso no funciona habrá que buscar otro comando o sw adicional que consiga el apagado. En algún foro he visto que hablan de un psshutdown.exe pero no lo he encontrado por el momento. Yo tengo un programa que se llama AbsoluteShutdown.exe (de 710 KB) pero no sé de donde lo saqué ni tampoco si funcionará correctamente en un Windows 2000 Server.

Puedes echarle un vistazo a estas páginas:

http://www.cyberciti.biz/tips/schedule-windows-server-to-reboot-or-shutdown-automatically.html

http://support.microsoft.com/kb/317371/es

A ver si te dan alguna pista.

Si el shutdown importado funciona correctamente tendríamos que volver a sospechar del "||". Pero si quieres practicar con la solución que te propuse puedes sustituir, a modo de prueba, el "if errorlevel 1 shutdown -s" por "if errorlevel 1 echo el ping fue incorrecto" y hacer el ping a una IP que no exista o no sea accesible. Si eso funciona como se espera puedes volver a usar "||" y ver si "ping 100.100.100.100 || echo PING INCORRECTO" también da el mismo resultado.

Ya me dirás.

Todo bien.

Te comento que el comando shutdown exportado del XP si funciona tal y como lo explicaste en el anterior ejemplo.

Ahora bien en mi pequeño archivo llamado salir.bat yo solo tengo las siguientes lineas. Que seria una ip que no esta accesible.

ping 194.194.8.235 -n 10

if errorlevel 1 echo el ping fue incorrecto

/* Esta escrito así, tal y como lo vez */

Según la explicación que indicas debe de dar el mensaje "el ping fue incorrecto" pero no lo da, aquí creo que el problema es mi nulo conocimiento de dicho lenguaje. Me parece que en mi pequeño script hace falta mas código.

Todo bien.

Si dígito:

ping 194.194.8.171 -n 10
if errorlevel 0 shutdown -s -t 300

Osea cambio el "0" por el "1", si realiza el código que interpreta el if errorlevel, el asunto es que aunque me conteste el ping siempre envía el comando de apagado de equipo.

La idea es que se apague automáticamente cuando no me conteste el ping.

Todo bien.

Hay algo muy extraño en mi caso, if errorlevel siempre da "0" aunque el ping este activo o no. Supongo que es problema del sistema operativo.

Tengo unas imágenes, si me envías un correo te las adjunto.

ok.

Por lo que dices parece una mala realización del comando ping en ese sistema operativo y ahora que sale el tema me parece recordar que cuando se empezó a trabajar con MSDOS y redes IP había algún problema de ese tipo.

La solución la apuntan en:

http://www.computing.net/answers/windows-2000/errorlevel-not-produced-by-ping/61261.html

En lugar de lo que estamos usando usa esto:

194.194.8.235 -n 10 | find "TTL" > nul
if errorlevel 1 echo ping incorrecto.

Ya me contarás.

Todo bien.

Gracias por su ayuda, problema resuelto.

ok.

Con las prisas (me tenía que ir cuando lo estaba escribiendo) no me di cuenta de que faltaba el "ping".

Quedaría así

Ping 194.194.8.235 -n 10 | find "TTL" > nul
if errorlevel 1 echo ping incorrecto

Si funciona, que creo que lo hará, solo tienes que cambiar el comando "echo ping incorrecto" por "shutdown -s".

Si prefieres que no se muestren las instrucciones del BAT puedes poner "@echo off" como primera línea.

Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas