Ідентифікатор події Windows для зміни рівня акумулятора


9

Мені потрібно створити завдання в TS на основі зміни рівня акумулятора. Скажімо, мій акумулятор падає з 67% до 66% . Як я можу виконати завдання на основі цієї події. Чи Windows взагалі це записує? Я не міг ніде знайти цю інформацію.


Яка версія Windows?
DavidPostill

WIndows 10 (а краще і W7)
RiddleMeЦе

Відповіді:


11

Мені потрібно створити завдання в Планувальнику завдань на основі зміни рівня акумулятора

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 синтаксис

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 - відмінна довідка для всіх речей, що стосуються cmd-рядка Windows.
  • eventcreate - створіть власну подію у переглядачі подій Windows.
  • schtasks - Створення / редагування запланованої роботи / завдання. Завдання можна створити на локальному або віддаленому комп'ютері.
  • wmic - Команда інструментації управління Windows.

Мені це дуже подобається! З вашого POV, краще створити події та запустити завдання на основі подій (наприклад, PS-скрипт)? Або ... змінити цей скрипт, щоб запустити мій PS-скрипт, якщо рівень заряду акумулятора впаде на 1%. Я припускав, що Windows створює події для зміни рівня акумулятора. Я не замислювався над таким підходом, який може бути кращим.
RiddleMeThis

1
@MiHa. Залежить від вас. Що найлегше зрозуміти та підтримувати :)
DavidPostill

@MiHa Події в режимі живлення / батареї , robvanderwoude.com/sourcecode.php?src=battstat_xp та robvanderwoude.com/sourcecode.php?src=battrun_xp, і, можливо, варто їх прочитати
DavidPostill

6

Є Microsoft-Windows-Batteryпостачальник ETW з BatteryPercentRemainingподією з ідентифікатором 13. Ви можете кодувати проект, який використовує TraceEvent для створення слухача в реальному часі для цього Microsoft-Windows-Batteryпровайдера. Подія містить записи, RemainingPercentageщоб показати статус та PercentageChangeпобачити зміни:

введіть тут опис зображення

Коли ви побачите цю подію і побачите -1зміни для PercentageChange, запустіть потрібну програму.


2

Гаразд, сценарій, наданий 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, але не знаю, чому це не було схвалено ...


Він поставив мене на правильний шлях, саме тому я прийняв його відповідь, але дуже дякую! для вашого фіксованого сценарію.
RiddleMeThis

Виправляючи код, я зрозумів, наскільки баггі і помилково findstrце ... Шкіра дуже погана! Seriuosly, Microsoft? Мене вражає брудний маленький злом DavidPostill, щоб зробити роботу.
AneesAhmed777

0

Існує набагато простіший спосіб перевірити рівень акумулятора. У області навігації просто наведіть курсор миші на значок батареї, і це дасть відсоток.


Так, але це дійсно не те, що я хотів ... Я хотів контролювати рівень акумулятора автоматично і на основі рівня акумулятора робити щось (знову ж таки автоматично)
RiddleMeThis

Будь ласка, прочитайте запитання ще раз уважно. Ваша відповідь не відповідає на початкове запитання.
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.