Identyfikator zdarzenia Windows dla zmiany poziomu baterii


9

Muszę utworzyć zadanie w TS na podstawie zmiany poziomu baterii. Powiedzmy, że moja bateria spada z 67% do 66% . Jak mogę uruchomić zadanie na podstawie tego zdarzenia? Czy system Windows w ogóle to rejestruje? Nigdzie nie mogłem znaleźć tych informacji.


Która wersja systemu Windows?
— DavidPostill

Windows 10 (a najlepiej także W7)
— RiddleMeThis

Odpowiedzi:


11

Muszę utworzyć zadanie w Harmonogramie zadań na podstawie zmiany poziomu baterii

Windows nie rejestruje tego rodzaju szczegółów jako zdarzeń. Możesz jednak użyć czegoś takiego jak plik wsadowy poniżej i utworzyć niestandardowe zdarzenie.


Battery.cmd

Ten plik wsadowy monitoruje bieżące procentowe naładowanie akumulatora i tworzy zdarzenie zdefiniowane przez użytkownika, jeśli ładunek spadnie poniżej zdefiniowanej przez użytkownika wartości progowej.

@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

Uwagi:

  • Na Eventcreatepolecenie działa w systemie Windows XP włącznie systemie Windows 10, nie wymaga uprawnień administratora do pracy
  • Ustaw _thresholdzgodnie z wymaganiami
  • Jeśli bateria spadnie poniżej tej wartości, 999w dzienniku zdarzeń APLIKACJI z opisem zostanie wygenerowane zdarzenie o identyfikatorzeBattery charge has dropped
  • Zmodyfikuj eventcreatepolecenie zgodnie z potrzebami.
  • Zmodyfikuj timeoutopóźnienie zgodnie z potrzebami.

Przykładowe dane wyjściowe:

Moja bateria ma obecnie ładunek 81%. Ustawiłem próg na 82. Oto, co się stanie, gdy uruchomię Battery.cmd:

> battery
81
threshold reached

SUCCESS: An event of type 'WARNING' was created in the 'APPLICATION' log with 'EventCreate' as the source.

A oto nowy wpis w Dzienniku zdarzeń:

wprowadź opis zdjęcia tutaj


składnia eventcreate

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"

Dalsza lektura

  • Indeks AZ wiersza polecenia systemu Windows CMD - doskonałe odniesienie do wszystkich rzeczy związanych z wierszem cmd systemu Windows.
  • eventcreate - Utwórz niestandardowe zdarzenie w Podglądzie zdarzeń systemu Windows.
  • schtasks - Utwórz / edytuj zaplanowane zadanie / zadanie. Zadanie można utworzyć na komputerze lokalnym lub zdalnym.
  • wmic - polecenie Instrumentacji zarządzania Windows.

Naprawdę to lubię! Z poziomu POV lepiej jest tworzyć zdarzenia i uruchamiać zadania oparte na zdarzeniach (np. Skrypt PS)? Lub ... zmodyfikuj ten skrypt, aby uruchomić mój skrypt PS, jeśli poziom naładowania baterii spadnie o 1%. Zakładałem, że Windows tworzy zdarzenia dla zmiany poziomu baterii. Nie myślałem o tym podejściu, które może być lepsze.
— RiddleMeThis

1
@ MiHa Do ciebie. Cokolwiek jest najłatwiejsze do zrozumienia i utrzymania :)
— DavidPostill


6

Istnieje Microsoft-Windows-Batterydostawca ETW ze BatteryPercentRemainingzdarzeniem o identyfikatorze 13. Możesz zakodować projekt, który używa TraceEvent, aby utworzyć detektor w czasie rzeczywistym dla tego Microsoft-Windows-Batterydostawcy. W zdarzeniu znajdują się wpisy RemainingPercentagepokazujące status i PercentageChangezmianę:

wprowadź opis zdjęcia tutaj

Gdy zobaczysz to zdarzenie i zobaczysz -1zmianę dla PercentageChange, uruchom odpowiedni program.


2

OK, skrypt dostarczony przez DavidPostill nie działa. Jest to ładny mały skrypt, ale kod jest albo nieregularny, albo nieaktualny.

Oto ustalony:

@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

Zasugerowałem tę zmianę w odpowiedzi DavidPostill, ale nie wiem, dlaczego nie została zatwierdzona ...


Postawił mnie na dobrej drodze, dlatego zaakceptowałem jego odpowiedź, ale bardzo dziękuję! dla ustalonego skryptu.
— RiddleMeTis

Naprawiając kod, zdałem sobie sprawę, jak błędne i błędne findstrjest ... O wiele za źle! Seriuosly, Microsoft? Jestem pod wrażeniem brudnego, małego hacka Davida Postilla, aby wykonać zadanie.
— AneesAhmed777

0

Jest o wiele łatwiejszy sposób sprawdzenia poziomu naładowania baterii. W obszarze nawigacji po prostu najedź myszką na ikonę baterii, a wyświetli się procent.


Tak, ale to naprawdę nie to, czego chciałem ... Chciałem automatycznie monitorować poziom naładowania baterii i na podstawie poziomu baterii zrobić coś (ponownie automatycznie)
— RiddleMeThis

Przeczytaj uważnie pytanie ponownie. Twoja odpowiedź nie odpowiada na pierwotne pytanie.
— DavidPostill
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.