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.
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ń:
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"
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.
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ę:
Gdy zobaczysz to zdarzenie i zobaczysz -1zmianę dla PercentageChange, uruchom odpowiedni program.
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 ...
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.
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)
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.