J'ai besoin de créer une tâche dans TS basée sur le changement de niveau de la batterie. Disons que ma batterie tombe de 67% à 66%. Comment puis-je exécuter une tâche basée sur cet événement? Windows enregistre-t-il cela? Je n'ai pas pu trouver cette information n'importe où.
Windows ne colle pas ce genre de détail comme des événements. Vous pouvez cependant utiliser quelque chose comme le fichier de commandes ci-dessous et créer un événement personnalisé.
Ce fichier de lots surveille le pourcentage de pile actuel et crée un événement défini par l'utilisateur si la charge tombe en dessous d'une valeur de seuil définie par l'utilisateur.
@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
Remarques:
Eventcreate
fonctionne sur Windows XP jusqu'à et y compris Windows 10, il nécessite des privilèges d'administrateur pour travailler_threshold
comme demandé999
sera généré dans le journal des événements d'application avec la description Battery charge has dropped
eventcreate
au besoin pour votre situation.timeout
au besoin pour votre situation.Exemple de sortie :
Ma batterie a actuellement une charge de 81%. Je fixe le seuil sur 82
. Voici ce qui se passe quand je courais Battery.cmd
:
> battery
81
threshold reached
SUCCESS: An event of type 'WARNING' was created in the 'APPLICATION' log with 'EventCreate' as the source.
Et voici la nouvelle entrée dans le journal des événements:
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"
Il y a un fournisseur Microsoft-Windows-Battery
Etw avec BatteryPercentRemaining
événement avec ID 13. Vous pouvez coder un projet qui utilise traceevent pour créer un écouteur en temps réel Pour ce fournisseur Microsoft-Windows-Battery
. L'événement a les entrées RemainingPercentage
pour montrer le statut et PercentageChange
pour voir le changement:
Lorsque vous voyez cet événement et que vous voyez le -1
Modifier pour PercentageChange
, exécutez le programme souhaité.
Ok, le script fourni par Davidposttill ne fonctionne pas. C'est un bon petit script, mais le code est erratique ou obsolète.
@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
J'ai suggéré cette modification de la réponse de Davidpostill, mais je ne sais pas pourquoi il n'a pas été approuvé ...
Il y a un moyen beaucoup plus facile de vérifier le niveau de la batterie. Dans la zone de navigation, mettez simplement la souris sur l'icône de la batterie et cela donnera un pourcentage.