Windows-Ereignis-ID für die Änderung des Akkuladestandes

9

Ich muss eine Aufgabe in TS basierend auf der Änderung des Batteriestands erstellen. Angenommen, 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.

RiddleMeThis
quelle
Welche Windows-Version?
DavidPostill
Windows 10 (und vorzugsweise auch W7)
RiddleMeThis

Antworten:

11

Ich muss eine Aufgabe im Taskplaner basierend auf der Änderung des Batteriestands erstellen

Windows protokolliert diese Art von Details nicht als Ereignisse. Sie können jedoch die folgende Batchdatei verwenden und ein benutzerdefiniertes Ereignis erstellen.


Battery.cmd

Diese Batch-Datei überwacht die aktuelle prozentuale Batterieladung 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
  • Nach _thresholdBedarf einstellen
  • Wenn die Batterie diesen Wert unterschreitet 999, wird im Ereignisprotokoll APPLICATION ein Ereignis mit der ID mit der Beschreibung generiertBattery charge has dropped
  • Ändern Sie den eventcreateBefehl nach Bedarf für Ihre Situation.
  • Ändern Sie die timeoutVerzögerung entsprechend Ihrer Situation.

Beispielausgabe:

Mein Akku ist derzeit zu 81% aufgeladen. Ich setze den Schwellenwert 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:

Geben Sie hier die Bildbeschreibung ein


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"

Weiterführende Literatur

  • Ein AZ-Index der Windows CMD-Befehlszeile - Eine hervorragende Referenz für alle Windows-Cmd-Zeilen.
  • 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 oder einem Remotecomputer erstellt werden.
  • wmic - Windows Management Instrumentation-Befehl.
DavidPostill
quelle
Ich mag das sehr! Es ist besser, aus Ihrem POV Ereignisse zu erstellen und ereignisbasierte Aufgaben auszuführen (z. B. PS-Skript). Oder ... ändern Sie dieses Skript, um mein PS-Skript auszuführen, wenn der Akkuladestand um 1% sinkt. Ich nahm an, dass Windows Ereignisse für die Änderung des Akkuladestandes erstellt. Ich habe nicht über diesen Ansatz nachgedacht, der besser sein könnte.
RiddleMeThis
1
@ MiHa Bis zu dir. Was am einfachsten zu verstehen und zu pflegen ist :)
DavidPostill
6

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

Geben Sie hier die Bildbeschreibung ein

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

magicandre1981
quelle
2

OK, das von DavidPostill bereitgestellte Skript funktioniert nicht. Es ist ein schönes kleines Skript, aber der Code ist entweder unberechenbar oder veraltet.

Hier ist die 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 Änderung in DavidPostills Antwort vorgeschlagen, aber ich weiß nicht, warum sie nicht genehmigt wurde ...

AneesAhmed777
quelle
Er hat mich auf den richtigen Weg gebracht, weshalb ich seine Antwort akzeptiert habe, aber vielen Dank! für Ihr festes Skript.
RiddleMeThis
Während ich den Code reparierte, wurde mir klar, wie fehlerhaft und fehlerhaft das findstrist ... Viel zu schade! Ernsthaft, Microsoft? Ich bin beeindruckt von DavidPostills schmutzigem kleinen Hack, um die Arbeit zu erledigen.
AneesAhmed777
0

Es gibt eine viel einfachere Möglichkeit, den Batteriestand zu überprüfen. Bewegen Sie im Navigationsbereich einfach die Maus über das Batteriesymbol und es wird ein Prozentsatz angezeigt.

Gary Weinstein
quelle
Ja, aber das ist wirklich nicht das, was ich wollte ... Ich wollte den Batteriestand automatisch überwachen und basierend auf dem Batteriestand einige
Dinge
Bitte lesen Sie die Frage noch einmal sorgfältig durch. Ihre Antwort beantwortet nicht die ursprüngliche Frage.
DavidPostill