Windows-Ereignis-ID für Batteriestandänderung

3191
RiddleMeThis

Ich muss eine Aufgabe in TS erstellen, die auf einem Batteriestandwechsel basiert. Nehmen wir an, meine Batterie sinkt von 67% auf 66% . Wie kann ich eine Aufgabe basierend auf diesem Ereignis ausführen? Protokolliert Windows dies überhaupt? Ich konnte diese Informationen nirgendwo finden.

8
Welche Windows-Version? DavidPostill vor 7 Jahren 0
Windows 10 (und vorzugsweise auch W7) RiddleMeThis vor 7 Jahren 0

4 Antworten auf die Frage

10
DavidPostill

Ich muss im Taskplaner eine Aufgabe erstellen, die auf dem Batteriestatuswechsel basiert

Windows protokolliert diese Art von Details nicht als Ereignisse. Sie können jedoch etwas wie die Stapeldatei unten verwenden und ein benutzerdefiniertes Ereignis erstellen.


Battery.cmd

Diese Batchdatei überwacht die aktuelle prozentuale Akkuladung und erstellt ein benutzerdefiniertes Ereignis, wenn die Ladung unter einen benutzerdefinierten Schwellenwert fällt.

@echo off setlocal EnableDelayedExpansion rem set threshold value set _threshold=82 :start rem get the battery charge rem use findstr to strip blank lines from wmic output for /f "usebackq skip=1 tokens=1" %%i in (`wmic Path Win32_Battery Get EstimatedChargeRemaining ^| findstr /r /v "^$"`) do ( set _charge=%%i echo !_charge! if !_charge! lss !_threshold! ( echo threshold reached rem create a custom event in the application event log rem requires administrator privileges  eventcreate /l APPLICATION /t WARNING /ID 999 /D "Battery charge has dropped" goto :done ) else ( rem wait for 10 minutes then try again timeout /t 600 /nobreak goto :start ) ) :done endlocal 

Anmerkungen:

  • Der EventcreateBefehl funktioniert unter Windows XP bis einschließlich Windows 10 und erfordert Administratorrechte
  • Legen Sie _thresholdnach Bedarf fest
  • Wenn die Batterie diesen Wert unterschreitet 999, wird im Ereignisprotokoll APPLICATION mit der Beschreibung ein Ereignis mit einer ID generiertBattery charge has dropped
  • Ändern Sie den eventcreateBefehl entsprechend Ihrer Situation.
  • Ändern Sie die timeoutVerzögerung entsprechend Ihrer Situation.

Beispielausgabe:

Mein Akku ist derzeit zu 81% aufgeladen. Ich setze die Schwelle auf 82. Folgendes passiert, wenn ich renne Battery.cmd:

> battery 81 threshold reached  SUCCESS: An event of type 'WARNING' was created in the 'APPLICATION' log with 'EventCreate' as the source. 

Und hier ist der neue Eintrag im Ereignisprotokoll:


EventCreate-Syntax

EVENTCREATE [/S system [/U username [/P [password]]]] /ID eventid [/L logname] [/SO srcname] /T type /D description  Description: This command line tool enables an administrator to create a custom event ID and message in a specified event log.  Parameter List: /S system Specifies the remote system to connect to.  /U [domain\]user Specifies the user context under which the command should execute.  /P [password] Specifies the password for the given user context. Prompts for input if omitted.  /L logname Specifies the event log to create an event in.  /T type Specifies the type of event to create. Valid types: SUCCESS, ERROR, WARNING, INFORMATION.  /SO source Specifies the source to use for the event (if not specified, source will default to 'eventcreate'). A valid source can be any string and should represent the application or component that is generating the event.  /ID id Specifies the event ID for the event. A valid custom message ID is in the range of 1 - 1000.  /D description Specifies the description text for the new event.  /? Displays this help message.   Examples: EVENTCREATE /T ERROR /ID 1000 /L APPLICATION /D "My custom error event for the application log"  EVENTCREATE /T ERROR /ID 999 /L APPLICATION /SO WinWord /D "Winword event 999 happened due to low diskspace"  EVENTCREATE /S system /T ERROR /ID 100 /L APPLICATION /D "Custom job failed to install"  EVENTCREATE /S system /U user /P password /ID 1 /T ERROR /L APPLICATION /D "User access failed due to invalid user credentials" 

Lesen Sie weiter

  • Ein AZ-Index der Windows-CMD-Befehlszeile - Eine hervorragende Referenz für alles, was mit Windows-Cmd-Zeilen in Verbindung steht.
  • eventcreate - Erstellen Sie ein benutzerdefiniertes Ereignis in der Windows-Ereignisanzeige.
  • schtasks - Erstellen / Bearbeiten eines geplanten Jobs / einer geplanten Aufgabe. Der Job kann auf dem lokalen Computer oder auf einem Remote-Computer erstellt werden.
  • wmic - Befehl zur Windows-Verwaltungsinstrumentation.
Ich mag das sehr! Es ist besser, von Ihrem POV aus Ereignisse zu erstellen und ereignisbasierte Aufgaben (z. B. PS-Skript) auszuführen. Oder ... ändern Sie dieses Skript, um mein PS-Skript auszuführen, wenn der Akkuladestand um 1% sinkt. Ich ging davon aus, dass Windows Ereignisse für den Batteriestatuswechsel erstellt. Ich habe nicht über diesen Ansatz nachgedacht, der vielleicht besser ist. RiddleMeThis vor 7 Jahren 0
@MiHa Bis zu Ihnen. Welches ist am einfachsten zu verstehen und zu pflegen :) DavidPostill vor 7 Jahren 1
@MiHa [Protokollierung von Energie- / Batterieereignissen] (// stackoverflow.com/q/18514076), http://www.robvanderwoude.com/sourcecode.php?src=battstat_xp und http://www.robvanderwoude.com/sourcecode .php? src = battrun_xp und könnte auch lesenswert sein DavidPostill vor 7 Jahren 0
6
magicandre1981

Es gibt einen Microsoft-Windows-BatteryETW-Anbieter mit BatteryPercentRemainingEreignis mit der ID 13. Sie können ein Projekt codieren, das mit TraceEvent einen Echtzeit-Listener für diesen Microsoft-Windows-BatteryAnbieter erstellt. Das Ereignis enthält die Einträge RemainingPercentage, um den Status anzuzeigen und PercentageChangedie Änderung anzuzeigen:

Wenn Sie dieses Ereignis sehen und die -1Änderung sehen PercentageChange, führen Sie das gewünschte Programm aus.

2
AneesAhmed777

OK, das von DavidPostill zur Verfügung gestellte Skript funktioniert nicht. Es ist ein schönes kleines Skript, aber der Code ist entweder unberechenbar oder veraltet.

Hier ist das Feste:

@echo off setlocal EnableDelayedExpansion rem set threshold value set _threshold=30 :start rem get the battery charge rem use findstr to strip blank lines from wmic output for /f "usebackq skip=1 tokens=1" %%i in (`wmic Path Win32_Battery Get EstimatedChargeRemaining ^| findstr /r /v "^$"`) do ( set _charge=%%i echo !_charge! if !_charge! lss !_threshold! ( echo threshold reached rem create a custom event in the application event log rem requires administrator privileges eventcreate /l APPLICATION /t WARNING /ID 999 /D "Battery charge has dropped below the threshold." goto :done ) else ( rem wait for 1 minute then try again timeout /t 60 /nobreak goto :start ) ) :done endlocal 

Ich habe diese Bearbeitung in DavidPostills Antwort vorgeschlagen, aber ich weiß nicht, warum es nicht genehmigt wurde ...

Er hat mich auf die richtige Spur gebracht, weshalb ich seine Antwort akzeptiert habe, aber vielen Dank! für dein festes Skript. RiddleMeThis vor 7 Jahren 0
Als ich den Code korrigierte, wurde mir klar, wie fehlerhaft und fehlerhaft die "findstr" ist ... Viel zu schade! Ernsthaft, Microsoft? Ich bin beeindruckt von DavidPostills schmutzigem kleinem Hack, um die Arbeit zu erledigen. AneesAhmed777 vor 7 Jahren 0
0
Gary Weinstein

Es gibt eine viel einfachere Möglichkeit, den Akkuladestand zu überprüfen. Bewegen Sie den Mauszeiger im Navigationsbereich mit der Maus über das Akkusymbol, um den Prozentsatz anzuzeigen.

Ja, aber das war wirklich nicht das, was ich wollte ... Ich wollte den Ladezustand automatisch überwachen und abhängig vom Ladezustand etwas erledigen (wieder automatisch) RiddleMeThis vor 7 Jahren 0
Bitte lesen Sie die Frage noch einmal sorgfältig. Ihre Antwort beantwortet die ursprüngliche Frage nicht **. DavidPostill vor 7 Jahren 0