ID de evento de Windows para cambio de nivel de batería

ID de evento de Windows para cambio de nivel de batería

Necesito crear una tarea en TS basada en el cambio del nivel de la batería. Digamos que mi batería se cae de67%a66%. ¿Cómo puedo ejecutar una tarea basada en este evento? ¿Windows registra esto? No pude encontrar esta información en ninguna parte.

Respuesta1

Necesito crear una tarea en el Programador de tareas según el cambio del nivel de la batería

Windows no registra este tipo de detalles como eventos. Sin embargo, puedes usar algo como el archivo por lotes a continuación y crear un evento personalizado.


Batería.cmd

Este archivo por lotes monitorea el porcentaje de carga actual de la batería y crea un evento definido por el usuario si la carga cae por debajo de un valor umbral definido por el usuario.

@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

Notas:

  • El Eventcreatecomando funciona en Windows XP hasta Windows 10 inclusive, requiere privilegios de administrador para funcionar
  • Establecer _thresholdsegún sea necesario
  • Si la batería cae por debajo de este valor, 999se generará un evento con ID en el registro de eventos de la APLICACIÓN con la descripciónBattery charge has dropped
  • Modifique el eventcreatecomando según sea necesario para su situación.
  • Modifique el timeoutretraso según sea necesario para su situación.

Salida de ejemplo:

Mi batería actualmente tiene una carga del 81%. Puse el umbral en 82. Esto es lo que sucede cuando ejecuto Battery.cmd:

> battery
81
threshold reached

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

Y aquí está la nueva entrada en el Registro de eventos:

ingrese la descripción de la imagen aquí


sintaxis de creación de eventos

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"

Otras lecturas

  • Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
  • crear evento- Cree un evento personalizado en el Visor de eventos de Windows.
  • tareas- Crear/editar un trabajo/tarea programada. El trabajo se puede crear en la computadora local o remota.
  • wmic- Comando de Instrumental de Gestión de Windows.

Respuesta2

Hay un Microsoft-Windows-Batteryproveedor ETW con BatteryPercentRemainingevento con ID 13. Puede codificar un proyecto que utiliceevento de seguimientopara crear unoyente en tiempo realpara este Microsoft-Windows-Batteryproveedor. El evento tiene las entradas RemainingPercentagepara mostrar el estado y PercentageChangever el cambio:

ingrese la descripción de la imagen aquí

Cuando vea este evento y vea el -1cambio PercentageChange, ejecute el programa que desee.

Respuesta3

Bien, el script proporcionado por DavidPostill no funciona. Es un pequeño script agradable, pero el código es errático o está desactualizado.

Aquí está el arreglado:

@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

Sugerí esta edición en la respuesta de DavidPostill, pero no sé por qué no fue aprobada...

Respuesta4

Existe una forma mucho más sencilla de comprobar el nivel de la batería. En el área de navegación, simplemente coloque el mouse sobre el ícono de la batería y le dará un porcentaje.

información relacionada