Comment puis-je arrêter, redémarrer ou fermer la session Windows via un fichier bat?

660

J'ai utilisé la connexion Bureau à distance pour accéder à un poste de travail. Mais dans cet environnement, je ne peux pas utiliser les options d'alimentation du menu Démarrer. J'ai besoin d'un autre moyen d'arrêter ou de redémarrer.

Comment contrôler l'état d'alimentation de mon ordinateur via la ligne de commande?

Keng
la source

Réponses:

1165

Les façons les plus courantes d'utiliser la shutdowncommande sont les suivantes:

  • shutdown -s - Arrête.
  • shutdown -r - Redémarre.
  • shutdown -l - Se déconnecte.
  • shutdown -h - Hiberne.

    Remarque: Il y a un piège courant dans lequel les utilisateurs pensent -h"aide" (ce qu'il fait pour tous les autres programmes en ligne de commande ... sauf shutdown.exe, où cela signifie "mise en veille prolongée"). Ils courent alors shutdown -het éteignent accidentellement leurs ordinateurs. Attention à ça.

  • shutdown -i- "Mode interactif". Au lieu d'effectuer une action, il affiche une boîte de dialogue GUI.

  • shutdown -a - Annule une commande d'arrêt précédente.

Les commandes ci-dessus peuvent être combinées avec ces options supplémentaires:

  • -f- Force les programmes à quitter. Empêche le processus d'arrêt de se bloquer.
  • -t <seconds>- Règle le temps jusqu'à l'arrêt. Utilisez -t 0pour arrêter immédiatement.
  • -c <message>- Ajoute un message d'arrêt. Le message se retrouvera dans le journal des événements.
  • -y - Force une réponse "oui" à toutes les requêtes d'arrêt.

    Remarque: Cette option n'est documentée dans aucune documentation officielle. Il a été découvert par ces utilisateurs de StackOverflow .


Je veux m'assurer que d'autres bonnes réponses sont également mentionnées avec celle-ci. Les voici dans aucun ordre particulier.

Keng
la source
188
Lisez à propos de l'utilisation de -f (pour forcer) dans la réponse suivante. Dit le gars qui ne l'a pas fait et qui a maintenant un ordinateur bloqué à l'arrêt de l'autre côté de la planète pendant le week-end (:
pasx
11
+1 juste que j'ai utilisé à la /<switch>place de -<switch>. La section d'aide utilise également /.
legends2k
Mon expérience: l'utilisation de l'option -s (arrêt) dans Remote Desktop (comme le mentionne l'OP) ne fait que mettre fin au bureau distant mais laisse la machine distante intacte.
Heri
3
J'utilise "-r" pour les machines distantes. Il redémarrera donc et n'aura pas besoin d'une intervention manuelle.
granadaCoder
6
Si vous êtes sur une machine distante, vous pouvez également vouloir ajouter l' -foption pour forcer le redémarrage. Sinon, votre session peut se fermer et une application tenace peut bloquer le système. Pour forcer un redémarrage immédiat: shutdown -t 0 -r -f. Pour une option plus amicale « leur donner un peu de temps », vous pouvez utiliser ceci: shutdown -t 30 -r. Le -fest impliqué par le délai d'attente. (extrait du montage proposé par Mateusz Konieczny )
Ole VV
375

Si vous êtes sur une machine distante, vous pouvez également ajouter l'option -f pour forcer le redémarrage. Sinon, votre session peut se fermer et une application tenace peut bloquer le système.

J'utilise ceci chaque fois que je veux forcer un redémarrage immédiat:

shutdown -t 0 -r -f

Pour une option plus conviviale de «leur donner du temps», vous pouvez utiliser ceci:

shutdown -t 30 -r

Comme vous pouvez le voir dans les commentaires, le -f est impliqué par le timeout.

Brutus 2006 est un utilitaire qui fournit une interface graphique pour ces options.

JosephStyons
la source
15
En lisant l'aide à l'arrêt sur Windows 8.1, je vois: "Si le délai d'expiration est supérieur à 0, le paramètre / f est implicite." Et comme le délai d'expiration par défaut est de 30 secondes, je pense qu'il est préférable de donner un peu de temps pour l'arrêt propre, puis l'arrêt forcé se produit après le délai d'expiration.
Zitrax
2
C'est un bon point. Je crois que lorsque j'ai écrit cela, le système d'exploitation que j'utilisais était Windows XP. Je vois que la remarque "/ f est implicite" est également présente dans Windows 7. J'ai modifié l'exemple en conséquence.
JosephStyons
2
Par défaut, ils ont 30 secondes. J'utilise pour immédiat: shutdown / r / t 0 et pour convivial: shutdown / r
dzampino
81

Personne n'a mentionné l' -moption d'arrêt à distance:

shutdown -r -f -m \\machinename

Aussi:

  • Le -rparamètre provoque un redémarrage (ce qui est généralement ce que vous voulez sur une machine distante, car le démarrage physique peut être difficile).
  • L' -foption de paramètre force le redémarrage.
  • Vous devez bien sûr disposer des privilèges appropriés pour arrêter la machine distante.
Kip
la source
2
le nom de la machine peut-il être une adresse IP? C'est-à-dire, pouvez-vous le faire sur Internet?
mcmillab
Si vous pouvez accéder à la machine via \\IP.AD.DR.ESS(c'est-à-dire que les ports nécessaires sont ouverts et que vous disposez des autorisations requises), alors oui, cela devrait fonctionner sur Internet.
Timothy Zorn
J'ai d'abord essayé avec -r uniquement et cela n'a pas fonctionné car je voulais un arrêt à distance. Cela a fonctionné avec shutdown -r -m. -f n'était pas nécessaire.
Dchris
38

Réponse originale: oct. 2008

Vous avez également tous les " rundll32.exe shell32.dll" série:

(voir la mise à jour ci-dessous)

  • rundll32.exe user.exe,**ExitWindows** [Arrêt rapide de Windows]
  • rundll32.exe user.exe,**ExitWindowsExec** [Redémarrez Windows]

    rundll32.exe shell32.dll,SHExitWindowsEx n
    

nsignifie:

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

(peut être combiné -> 6 = 2 + 4 FORCE REBOOT)


Mise à jour d'avril 2015 (6 ans et plus plus tard):

1800 INFORMATION souligne avec bonté dans les commentaires :

Ne pas utiliser rundll32.exeà cette fin. Il s'attend à ce que la fonction que vous avez passée sur la ligne de commande ait une signature de méthode très spécifique - elle ne correspond pas à la signature de méthode de ExitWindows.

Raymond CHEN a écrit:

La signature de fonction requise pour les fonctions appelées par rundll32.exeest:

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

Cela n'a pas empêché les gens d' rundll32appeler des fonctions aléatoires qui n'étaient pas conçues pour être appelées par rundll32, comme user32 LockWorkStationou user32 ExitWindowsEx.

(Oops)

La signature de fonction réelle pour ExitWindowsEx est:

BOOL WINAPI ExitWindowsEx(UINT uFlags, DWORD dwReserved);

Et pour que ce soit clair comme du cristal:

Rundll32 est un reste de Windows 95, et il est déconseillé depuis au moins Windows Vista car il viole de nombreuses directives d'ingénierie modernes.

VonC
la source
3
quelle est la différence entre l'arrêt et la mise hors tension?
Asdfg
17
@Asdfg aujourd'hui? aucun. Pour NT4 et avant, la carte mère ne supportait pas toujours la mise hors tension, mais uniquement l'arrêt (les fenêtres étaient complètement fermées, mais le PC était toujours sous tension électrique). Seule la mise hors tension (si le matériel le supportait à l'époque) fermait les fenêtres et coupait l'alimentation électrique. Aujourd'hui, l'arrêt et la mise hors tension le font.
VonC
2
N'utilisez pas rundll32.exe à cet effet. Il s'attend à ce que la fonction que vous avez passée sur la ligne de commande ait une signature de méthode très spécifique - elle ne correspond pas à la signature de méthode d'ExitWindows.
1800 INFORMATION
2
@ 1800INFORMATION très bon point. J'ai réécrit la réponse pour qu'il soit clair que ce n'est pas une option valable.
VonC
3
Pour être juste, cependant, peu importe le type de fuite de mémoire ou de corruption de pile que vous causez si vous arrêtez immédiatement le PC.
PRMan
10

Une autre petite astuce: lorsque je vais sur la route des fichiers batch, j'aime pouvoir l'interrompre au cas où je l'exécuterais accidentellement. Ainsi, le fichier de commandes appelle l'arrêt mais vous laisse ensuite à l'invite de commandes.

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

De plus, comme il s'agit d'une minuterie, vous obtenez à peu près le même frisson que lorsque vous chassez dans The Oregon Trail .

Gavin
la source
1
vous pouvez mettre une pause dans le fichier de bain, puis abandonner la commande, telle que la séquence d'
abandon
@ rsk82, être capable de s'en tirer avec n'importe quoi était une limitation malheureuse de ma copie TRS-80 d'Oregon Trail aussi, mais franchement, j'ai toujours considéré que c'était de la triche et mon frère était furieux chaque fois que je le faisais. Je dis juste: pourquoi voudriez-vous enrager mon frère?
Gavin
7

Lorsqu'il est déporté dans une machine (la cible est Windows XP de toute façon; je ne suis pas sûr de la cible Windows Vista), bien que l' arrêt dans le menu Démarrer soit remplacé par Disconnect Session ou quelque chose comme ça, il devrait y en avoir un appelé `` Windows Security '' qui le fait également la même chose que Ctrl+ Alt+ Endcomme l'a souligné Owen.

Carl
la source
J'avais l'habitude d'utiliser cette méthode mais elle ne fonctionne plus, c'est en ligne de commande.
user742864
J'ai également un gadget qui a des boutons d'arrêt, de redémarrage, d'hibernation, de verrouillage qui fonctionne dans RDP.
user742864
7

Vous êtes probablement au courant de cela, mais juste au cas où: il est beaucoup plus facile de simplement taper shutdown -r(ou n'importe quelle commande que vous aimez) dans la case "Exécuter" et appuyez sur Entrée.

Enregistre les fichiers de commandes qui traînent partout.

Dean plutôt
la source
ouais ... j'aime juste avoir le double-clic assis là ... c'est à ça que sert le fichier -r bat; o)
Keng
17
attention à ne pas le mettre dans les programmes-> démarrage :)
Dean Rather
aw .. et un comportement curieux sera obtenu si le code est placé dans un fichier shutdown.bat. Essayez!
:)
6

J'écrirais ceci dans le bloc - notes ou WordPad pour une commande de déconnexion de base:

@echo off
shutdown -l

C'est essentiellement la même chose que de cliquer sur démarrer et fermer la session manuellement, mais c'est juste un peu plus rapide si vous avez le fichier de commandes prêt.

Peter Mortensen
la source
5

Je suis en retard à la fête, mais je n'ai pas encore vu cette réponse. Lorsque vous ne souhaitez pas utiliser un fichier de commandes ou tapez la commande. Vous pouvez simplement définir le focus sur le bureau, puis utiliser Alt+ F4.

Windows vous demandera ce que vous voulez faire, sélectionnez l'arrêt ou le redémarrage.

Pour des captures d'écran et même une vidéo, voir: https://tinkertry.com/how-to-shutdown-or-restart-windows-over-rdp

msoft
la source
3
@Keng, en lisant le problème réel "Je ne peux pas utiliser la fonction d'arrêt / redémarrage dans le menu Démarrer", il me semble que vous voulez savoir comment faire cela. La ligne de commande est une solution, le clavier en est une autre. Cela pourrait aider d'autres utilisateurs qui tombent sur cette question et souhaitent simplement une solution simple pour arrêter ou redémarrer.
msoft