Stellen Sie fest, ob ein Herunterfahren ansteht


11

Windows hat den Befehl shutdown /t, den Computer nach einer bestimmten Verzögerung herunterzufahren oder neu zu starten. Ein anstehendes Herunterfahren kann mit abgebrochen werden shutdown /a.

Aber wie kann ich feststellen, ob und wann ein Herunterfahren derzeit ansteht oder geplant ist, ohne es abzubrechen?


1
Shutdown.exe zeichnet Ereignisse im Windows SYSTEM-Ereignisprotokoll mit Source = User32 auf. Wenn ein Befehl zum Herunterfahren mit einer Zeitüberschreitung von> 120 Sekunden ausgegeben wird, wird die Ereignis-ID 1074 protokolliert.
DavidPostill

Ich kann diese Nachricht im Ereignisprotokoll finden. Es wird jedoch nicht angegeben, wann der Neustart geplant ist. Es sagt nur den Benutzer und Grund.
Ygoe

Sie müssen den Zeitpunkt des bevorstehenden Herunterfahrens kennen? Bitte fügen Sie diese wichtigen Informationen Ihrer Frage hinzu (Sie haben gerade die Antwort, die ich geschrieben habe, ungültig gemacht: /)
DavidPostill

Was nützt die -dOption? Herunterfahren . Vielleicht finden Sie den Shutdown Event Tracker nützlich .
Hastur

Ich habe die Informationen zur Frage hinzugefügt. /dGibt den Grund für das Herunterfahren an, den ich getan habe. Diese Informationen wurden im Ereignisprotokoll aufgezeichnet. Aber nicht die Auszeit von /t. Shutdown Event Tracker scheint nicht nützlich zu sein. Das Zeitlimit wird nicht angezeigt und muss im Voraus eingerichtet werden.
Ygoe

Antworten:


11

Wie kann ich feststellen, ob und wann ein Herunterfahren derzeit ansteht oder geplant ist, ohne es abzubrechen?

Ich glaube nicht, dass es möglich ist zu bestimmen, wann das Herunterfahren stattfinden wird.

Mit dem folgenden Algorithmus können Sie feststellen, ob ein Herunterfahren geplant ist:

  1. Führen Sie ein "Test" -Downdown shutdown /t xxxmit einem großen Wert für die Zeit aus .

    • Für Windows 7 oder höher wurde die maximal zulässige Zeit von 600 Sekunden auf 315.360.000 Sekunden (10 Jahre) erhöht.
  2. Wenn bereits ein Herunterfahren ansteht shutdown /t xxx, schlägt dies mit der Fehlerstufe fehl 1190:

    Ein Herunterfahren des Systems ist bereits geplant. (1190)

  3. Wenn Sie den obigen Fehler nicht erhalten, wissen Sie, dass kein vorheriges Herunterfahren geplant war. Daher müssen Sie das Herunterfahren "Test" mit löschen shutdown /a.

Das Obige kann in einer Batch-Datei erfolgen:

@echo off
rem perform a "test" shutdown with a large time
shutdown /t 999999
rem if there is already a shutdown pending then %ERRORLEVEL% will be 1190
if %ERRORLEVEL% equ 1190 (
  echo A shutdown is pending
  ) else (
  rem cancel the "test" shutdown
  shutdown /a
  echo No shutdown is pending
  )

Hinweis:

  • Ich habe die obige Batch-Datei nicht getestet, da ich meinen PC derzeit nicht herunterfahren möchte.

Weiterführende Literatur


1
Es gibt viel Vertrauen in Ihren Code, dass Sie es nicht gewagt haben, ihn selbst auszuführen, obwohl er den Computer laufen lassen soll.
TamaMcGlinn

@TamaMcGlinn Ich habe es getestet, seit ich die Antwort geschrieben habe ...
DavidPostill

0

Eine etwas kompliziertere Methode, um herauszufinden, ob ein Herunterfahren geplant ist oder nicht, besteht darin , den Status des Flags zu debuggen winlogon.exeund zu überprüfenShutdownInProgress . Sie benötigen Debugging-Tools für Windows .

Ich habe es nicht ausprobiert, aber dieser MSDN-Blogbeitrag erklärt, was hinter den Kulissen passiert, wenn Windows heruntergefahren wird und wie das Debuggen erfolgt winlogon.exe(was ein Kernelprozess ist). Der Debugger-Befehl zum Abrufen des Flag-Status scheint zu lauten:

dd winlogon! ShutdownInProgress l 1
01062b3c 00000000

Wenn Sie wissen, wie man Kernelprozesse in Windows debuggt, können Sie es ausprobieren. Diese Anleitung für Anfänger zum Debuggen mit CDB und NTSD könnte hilfreich sein.


Ähm ... Interessant. :-) Das sagt mir so viel wie die Fehlermeldung von einer Prüfung shutdown /t 99999, oder?
Ygoe

3
@LonelyPixel Richtig. Diese Methode ist nur für die Masochisten :)
Vinayak
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.