¿Cómo cierro, reinicio, cierro sesión de Windows a través de un archivo bat?

He estado utilizando Conexión a Escritorio remoto para acceder a una estación de trabajo, pero no puedo usar la función de apagado / reinicio en el menú Inicio mientras hago esto.

He puesto algunas opciones realmente útiles en la respuesta a continuación.

Nota: Quería asegurarme de que también se mencionaran algunas respuestas realmente buenas junto con las mías sobre esto.

Y aquí no están en ningún orden particular.

  • Forzar el cierre de JosephStyons
  • Ejecutando el archivo DLL desde VonC
  • Ejecutarlo desde el Run Box de Dean
  • Apagado remoto de Kip

A continuación se detalla cómo realizar las funciones de apagado a través de un archivo por lotes:

  • shutdown -r – reinicia
  • shutdown -s – shutsdown
  • shutdown -l – logoff
  • shutdown -t xx – donde xx es el número de segundos para esperar hasta el apagado / reinicio / cierre de sesión
  • shutdown -i – le da un cuadro de diálogo para completar qué función desea usar
  • shutdown -a : cancela el comando de apagado anterior … ¡muy útil!
  • shutdown -h – hibernate. Fácil error, no es por ayuda
  • shutdown -y – Elimina todas las solicitudes al apagar (la ayuda no está disponible en ninguna documentación)

Opciones adicionales:

  • -f – Fuerza la acción seleccionada
  • -t – Establecer el tiempo de apagado. Use -t 0 para “ahora”
  • -c – Agrega mensaje al apagado

Si está en una máquina remota, también puede agregar la opción -f para forzar el reinicio. De lo contrario, su sesión puede cerrarse y una aplicación obstinada puede colgar el sistema.

Lo uso cuando quiero forzar un reinicio inmediato:

 shutdown -t 0 -r -f 

Para una opción más amigable de “darles algo de tiempo”, puede usar esto:

 shutdown -t 30 -r 

Como puede ver en los comentarios, el -f está implícito por el tiempo de espera.

Brutus 2006 es una utilidad que proporciona una GUI para estas opciones.

Nadie ha mencionado la opción -m para el apagado remoto:

 shutdown -r -f -m \\machinename 

También:

  • El parámetro -r provoca un reinicio (que generalmente es lo que desea en una máquina remota, ya que iniciarlo físicamente puede ser difícil).
  • La opción del parámetro -f fuerza el reinicio.
  • Debe tener los privilegios adecuados para apagar la máquina remota, por supuesto.

Respuesta original: octubre de 2008

También tienes todo el rundll32.exe shell32.dll serie:

(ver la actualización a continuación)

  • rundll32.exe user.exe,**ExitWindows** [Apagado rápido de Windows]
  • rundll32.exe user.exe,**ExitWindowsExec** [Reiniciar Windows]

     rundll32.exe shell32.dll,SHExitWindowsEx n 

donde n significa:

  • 0 – LOGOFF
  • 1 – SHUTDOWN
  • 2 – REBOOT
  • 4 – FORCE
  • 8 – POWEROFF

(se puede combinar -> 6 = 2 + 4 FORCE REBOOT )


Actualización abril de 2015 (más de 6 años):

1800 INFORMACIÓN amablemente señala en los comentarios :

No use rundll32.exe para este propósito. Espera que la función que pasó en la línea de comando tenga una firma de método muy específica: no coincide con la firma del método de ExitWindows .

Raymond CHEN escribió:

  • en 2004 ” ¿Qué puede salir mal cuando no coincides con la convención de llamadas? “:

La firma de función requerida para las funciones llamadas por rundll32.exe es:

 void CALLBACK ExitWindowsEx(HWND hwnd, HINSTANCE hinst, LPSTR pszCmdLine, int nCmdShow); 

Eso no ha impedido que las personas usen rundll32 para llamar a funciones aleatorias que no fueron diseñadas para ser llamadas por rundll32 , como user32 LockWorkStation o user32 ExitWindowsEx .

(Vaya)

La firma de función real para ExitWindowsEx es:

 BOOL WINAPI ExitWindowsEx(UINT uFlags, DWORD dwReserved); 
  • en 2011: ” tirar basura en la acera: la triste historia del progtwig rundll32 ”

Y para que quede claro como el cristal:

  • en 2013 ” ¿Cuál es la guía sobre cuándo usar rundll32? Fácil: no lo use “:

Rundll32 es un Rundll32 de Windows 95, y ha quedado obsoleto desde al menos Windows Vista porque viola muchas de las pautas de ingeniería modernas.

Otro pequeño consejo: cuando voy por la ruta del archivo por lotes, me gusta poder abortar en caso de que lo ejecute accidentalmente. Por lo tanto, el archivo por lotes invoca el apagado pero luego lo deja en el símbolo del sistema.

 @echo off echo Shutting down in 10 seconds. Please type "shutdown /a" to abort. cmd.exe /K shutdown /f /t 10 /r 

Además, dado que tiene un temporizador, obtienes la misma emoción que cuando cazas en The Oregon Trail .

Cuando me remoto a una máquina (el objective es Windows XP de todos modos, no estoy seguro del objective de Windows Vista), aunque Shutdown en el menú de inicio es reemplazado por Disconnect Session o algo así, debería haber uno llamado ‘Windows Security’ que también funciona lo mismo que Ctrl + Alt + End como lo señala Owen.

Probablemente estés al tanto de esto, pero por las dudas: es mucho más fácil escribir shutdown -r (o el comando que quieras) en el cuadro “Ejecutar” y presionar enter.

Ahorra dejando archivos de lotes por todas partes.

Escribiría esto en el Bloc de notas o en WordPad para un comando de cierre de sesión básico:

 @echo off shutdown -l 

Esto es básicamente lo mismo que hacer clic en iniciar y cerrar sesión manualmente, pero es un poco más rápido si tiene listo el archivo por lotes.

Llego tarde a la fiesta, pero todavía no veo esta respuesta. Cuando no quiere usar un archivo por lotes o escriba el comando. Puede establecer el foco en el escritorio y luego usar Alt + F4 .

Windows le preguntará qué desea hacer, seleccione apagar o reiniciar.

Para obtener capturas de pantalla e incluso un video, consulte: https://tinkertry.com/how-to-shutdown-or-restart-windows-over-rdp

Intereting Posts