it-swarm.dev

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

He estado usando Conexión a escritorio remoto para entrar en una estación de trabajo. Pero en este entorno, no puedo usar las opciones de energía en el menú Inicio. Necesito una forma alternativa de apagar o reiniciar.

¿Cómo controlo el estado de energía de mi computadora a través de la línea de comando?

635
Keng

Las formas más comunes de usar el comando shutdown son las siguientes:

  • shutdown -s - se apaga.
  • shutdown -r - Reinicios.
  • shutdown -l - cierra la sesión.
  • shutdown -h - Hibernate.

    Nota: Hay un error común en el que los usuarios piensan que -h significa "ayuda" (lo que hace para todos los demás programas de línea de comandos ... excepto shutdown.exe, donde significa "hibernar"). Luego ejecutan shutdown -h y accidentalmente apagan sus computadoras. Cuidado con eso.

  • shutdown -i - "modo interactivo". En lugar de realizar una acción, muestra un diálogo de GUI.

  • shutdown -a - Anula un comando de apagado previo.

Los comandos anteriores se pueden combinar con estas opciones adicionales:

  • -f - obliga a los programas a salir. Evita que el proceso de cierre se atasque.
  • -t <seconds> - Establece el tiempo hasta el apagado. Use -t 0 para apagar inmediatamente.
  • -c <message> - Agrega un mensaje de apagado. El mensaje terminará en el registro de eventos.
  • -y: fuerza un "sí" a todas las consultas de apagado.

    Nota: Esta opción no está documentada en ninguna documentación oficial. Fue descubierto por estos usuarios de StackOverflow .


Quiero asegurarme de que algunas otras respuestas realmente buenas también se mencionan junto con esta. Aquí no están en ningún orden particular.

1141
Keng

Si está en una máquina remota, es posible que también desee agregar la opción -f a force el reinicio. De lo contrario, su sesión puede cerrarse y una aplicación obstinada puede bloquear el sistema.

Uso esto cuando quiero forzar un reinicio inmediato:

shutdown -t 0 -r -f

Para una opción más amigable de "dales un poco de tiempo", puedes usar esto:

shutdown -t 30 -r

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

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

374
JosephStyons

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 normalmente es lo que desea en una máquina remota, ya que iniciarlo físicamente puede ser difícil).
  • La opción de parámetro -f fuerza el reinicio.
  • Debe tener los privilegios adecuados para apagar la máquina remota, por supuesto.
81
Kip

Respuesta original: octubre de 2008.

También tienes todos los "rundll32.exe Shell32.dll" serie:

(ver actualización abajo)

  • rundll32.exe user.exe,**ExitWindows** [Cierre 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 de abril de 2015 (6+ años después):

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

No use rundll32.exe para este propósito. Se espera que la función que haya pasado en la línea de comando tenga una firma de método muy específica, no coincide con la firma de método de ExitWindows.

Raymond CHEN escribió:

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 a las personas utilizar rundll32 para llamar a funciones aleatorias que no fueron diseñadas para ser llamadas por rundll32, como user32 LockWorkStation o user32 ExitWindowsEx.

(oops)

La firma de la función real para ExitWindowsEx es:

BOOL WINAPI ExitWindowsEx(UINT uFlags, DWORD dwReserved);

Y para que quede claro:

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

37
VonC

Otro pequeño consejo: cuando voy por la ruta del archivo por lotes, me gusta poder abortarlo en caso de que lo ejecute accidentalmente. Por lo tanto, el archivo de proceso por lotes invoca el cierre pero lo deja en el comando Solicitar después.

@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 está en un temporizador, obtienes la misma emoción que cuando cazando en The Oregon Trail .

9
Gavin

Cuando se remotea a una máquina (el objetivo es Windows XP de todos modos, no estoy seguro acerca del objetivo de Windows Vista), aunque Shutdown en el menú de inicio se reemplaza por Disconnect Session o algo así como eso, debería haber uno llamado 'Seguridad de Windows' que también hace lo mismo que Ctrl + Alt + End como señalado por Owen.

7
Carl

Probablemente estés al tanto de esto, pero por si acaso: es mucho más fácil simplemente escribir shutdown -r (o el comando que quieras) en el cuadro "Ejecutar" y presiona enter.

Guarda archivos de lotes por todas partes.

7
Dean Rather

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

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

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

5
msoft

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

@echo off
shutdown -l

Básicamente, es lo mismo que hacer clic en inicio y cierre de sesión manualmente, pero es un poco más rápido si tiene el archivo por lotes listo.

4
Grant