
Мне нужно создать задачу в TS на основе изменения уровня заряда батареи. Допустим, моя батарея падает с67%к66%. Как мне запустить задачу на основе этого события. Windows вообще это регистрирует? Я нигде не смог найти эту информацию.
решение1
Мне нужно создать задачу в Планировщике задач на основе изменения уровня заряда батареи
Windows не регистрирует такие подробности как события. Однако вы можете использовать что-то вроде пакетного файла ниже и создать пользовательское событие.
Аккумулятор.cmd
Этот пакетный файл отслеживает текущий процент заряда аккумулятора и создает определяемое пользователем событие, если заряд падает ниже заданного пользователем порогового значения.
@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
и описанием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
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"
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- событиесоздать- Создайте пользовательское событие в средстве просмотра событий Windows.
- schtasks- Создать/изменить запланированное задание/задачу. Задание может быть создано на локальном или удаленном компьютере.
- wmic- Команда инструментария управления Windows.
решение2
Существует Microsoft-Windows-Battery
поставщик ETW с BatteryPercentRemaining
событием с идентификатором 13. Вы можете написать проект, который используетTraceEventчтобы создатьпрослушиватель в реальном временидля этого Microsoft-Windows-Battery
провайдера. Событие имеет записи RemainingPercentage
для отображения статуса и PercentageChange
просмотра изменений:
Когда вы увидите это событие и увидите -1
изменение для PercentageChange
, запустите нужную вам программу.
решение3
Хорошо, скрипт, предоставленный 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, но не знаю, почему ее не одобрили...
решение4
Есть гораздо более простой способ проверить уровень заряда батареи. В области навигации просто наведите курсор на значок батареи, и он покажет процент.