Мені потрібно створити завдання в TS на основі зміни рівня акумулятора. Скажімо, мій акумулятор падає з 67% до 66% . Як я можу виконати завдання на основі цієї події. Чи Windows взагалі це записує? Я не міг ніде знайти цю інформацію.
Мені потрібно створити завдання в TS на основі зміни рівня акумулятора. Скажімо, мій акумулятор падає з 67% до 66% . Як я можу виконати завдання на основі цієї події. Чи Windows взагалі це записує? Я не міг ніде знайти цю інформацію.
Відповіді:
Windows не записує такі деталі як події. Однак ви можете використовувати щось на зразок пакетного файлу нижче та створити власну подію.
Цей пакетний файл відстежує поточний відсоток заряду батареї та створює визначену користувачем подію, якщо заряд опускається нижче визначеного користувачем порогового значення.
@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
Примітки:
Eventcreate
команді працює на Windows XP до і включаючи Windows 10, вона вимагає прав адміністратора для роботи_threshold
як потрібно999
у журналі подій APPLICATION з описом генерується подія з ідентифікаторомBattery charge has dropped
eventcreate
команду відповідно до необхідної ситуації.timeout
затримку, як це потрібно для вашої ситуації.Приклад виводу:
Наразі мій акумулятор заряджає 81%. Я встановив поріг до 82
. Ось що відбувається під час запуску Battery.cmd
:
> battery
81
threshold reached
SUCCESS: An event of type 'WARNING' was created in the 'APPLICATION' log with 'EventCreate' as the source.
А ось новий запис у Журналі подій:
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"
Є Microsoft-Windows-Battery
постачальник ETW з BatteryPercentRemaining
подією з ідентифікатором 13. Ви можете кодувати проект, який використовує TraceEvent для створення слухача в реальному часі для цього Microsoft-Windows-Battery
провайдера. Подія містить записи, RemainingPercentage
щоб показати статус та PercentageChange
побачити зміни:
Коли ви побачите цю подію і побачите -1
зміни для PercentageChange
, запустіть потрібну програму.
Гаразд, сценарій, наданий DavidPostill, не працює. Це хороший маленький сценарій, але код або нестабільний, або застарілий.
@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
Я запропонував це змінити у відповідь DavidPostill, але не знаю, чому це не було схвалено ...
findstr
це ... Шкіра дуже погана! Seriuosly, Microsoft? Мене вражає брудний маленький злом DavidPostill, щоб зробити роботу.
Існує набагато простіший спосіб перевірити рівень акумулятора. У області навігації просто наведіть курсор миші на значок батареї, і це дасть відсоток.