Este dilema se puede solucionar de variadas formas, pero en este caso te compartimos la que en nuestra opinión es la resolución más completa.
Solución:
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, puede usar algo como el archivo por lotes a continuación y crear un evento personalizado.
Batería.cmd
Este archivo por lotes supervisa 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 de 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:
- los
Eventcreate
El comando funciona en Windows XP hasta Windows 10 inclusive, requiere privilegios de administrador para funcionar - Colocar
_threshold
según sea necesario - Si la batería cae por debajo de este valor, un evento con ID
999
se generará en el registro de eventos de la APLICACIÓN con la descripciónBattery charge has dropped
- Modificar el
eventcreate
comando según sea necesario para su situación. - Modificar el
timeout
retraso según lo requiera 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 corro 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:
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 comandos de Windows CMD: una referencia excelente para todo lo relacionado con la línea de comandos de Windows.
- eventcreate: cree un evento personalizado en el Visor de eventos de Windows.
- schtasks – Crear/editar un trabajo/tarea programada. El trabajo se puede crear en el equipo local o remoto.
- wmic: comando de instrumentación de administración de Windows.
Hay un Microsoft-Windows-Battery
proveedor de ETW con BatteryPercentRemaining
evento con ID 13. Puede codificar un proyecto que use TraceEvent para crear un oyente en tiempo real para este Microsoft-Windows-Battery
proveedor. El evento tiene las entradas. RemainingPercentage
para mostrar el estado y PercentageChange
para ver el cambio:
Cuando vea este evento y vea el -1
cambiar para PercentageChange
ejecute el programa que desee.
Bien, el script proporcionado por DavidPostill no funciona. Es un pequeño guión agradable, pero el código es errático o está desactualizado.
Aquí está el fijo:
@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…
Al final de todo puedes encontrar las notas de otros programadores, tú además tienes el poder dejar el tuyo si lo crees conveniente.