ID evento di Windows per la modifica del livello della batteria


9

Devo creare un'attività in TS basata sul cambio di livello della batteria. Supponiamo che la mia batteria scenda dal 67% al 66% . Come posso eseguire un'attività in base a questo evento. Windows registra questo? Non sono riuscito a trovare queste informazioni da nessuna parte.


Quale versione di Windows?
DavidPostill

Windows 10 (e preferibilmente anche W7)
RiddleMeQuesto

Risposte:


11

Devo creare un'attività in Utilità di pianificazione in base alla modifica del livello della batteria

Windows non registra questo tipo di dettagli come eventi. Puoi comunque usare qualcosa come il file batch qui sotto e creare un evento personalizzato.


Battery.cmd

Questo file batch controlla la carica percentuale corrente della batteria e crea un evento definito dall'utente se la carica scende al di sotto di un valore di soglia definito dall'utente.

@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

Appunti:

  • Il Eventcreatecomando funziona su Windows XP fino a Windows 10 incluso, per funzionare richiede i privilegi di amministratore
  • Impostare _thresholdcome richiesto
  • Se la batteria scende al di sotto di questo valore, 999verrà generato un evento con ID nel registro eventi APPLICAZIONE con la descrizioneBattery charge has dropped
  • Modifica il eventcreatecomando come richiesto per la tua situazione.
  • Modifica il timeoutritardo come richiesto per la tua situazione.

Esempio di output:

La mia batteria attualmente ha una carica dell'81%. Ho impostato la soglia su 82. Ecco cosa succede quando corro Battery.cmd:

> battery
81
threshold reached

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

Ed ecco la nuova voce nel registro eventi:

inserisci qui la descrizione dell'immagine


sintassi di 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"

Ulteriori letture

  • Un indice AZ della riga di comando CMD di Windows - Un riferimento eccellente per tutte le cose relative alla riga cmd di Windows.
  • eventcreate : crea un evento personalizzato nel Visualizzatore eventi di Windows.
  • schtasks : crea / modifica un lavoro / attività pianificato. Il lavoro può essere creato sul computer locale o remoto.
  • wmic : comando di Strumentazione gestione Windows.

Mi piace molto questo! Dal tuo POV, è meglio creare eventi ed eseguire attività basate su eventi (ad esempio script PS)? Oppure ... modifica questo script per eseguire il mio script PS, se il livello della batteria scende dell'1%. Supponevo che Windows stesse creando eventi per il cambio del livello della batteria. Non ho pensato a questo approccio, che potrebbe essere migliore.
RiddleMeQuesto

1
@MiHa A te. Qualunque sia il più facile da capire e mantenere :)
DavidPostill


6

Esiste un Microsoft-Windows-Batteryprovider ETW con BatteryPercentRemainingevento con ID 13. È possibile codificare un progetto che utilizza TraceEvent per creare un listener in tempo reale per questo Microsoft-Windows-Batteryprovider. L'evento ha le voci RemainingPercentageper mostrare lo stato e PercentageChangevedere la modifica:

inserisci qui la descrizione dell'immagine

Quando vedi questo evento e vedi la -1modifica per PercentageChange, esegui il programma desiderato.


2

OK, lo script fornito da DavidPostill non funziona. È un piccolo script carino, ma il codice è irregolare o obsoleto.

Ecco quello fisso:

@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

Ho suggerito questa modifica nella risposta di DavidPostill, ma non so perché non sia stato approvato ...


Mi ha messo sulla strada giusta, motivo per cui ho accettato la sua risposta, ma grazie mille! per il tuo script fisso.
RiddleMeQuesto

Mentre correggevo il codice, mi sono reso conto di quanto sia errato ed errato findstr... Troppo male! Seriuosly, Microsoft? Sono impressionato dal piccolo trucco sporco di DavidPostill per portare a termine il lavoro.
AneesAhmed777,

0

C'è un modo molto più semplice per controllare il livello della batteria. Nell'area di navigazione basta posizionare il mouse sull'icona della batteria e verrà visualizzata una percentuale.


Sì, ma non è quello che volevo ... Volevo monitorare automaticamente il livello della batteria e in base al livello della batteria fare alcune cose (di nuovo automaticamente)
RiddleMeQuesto

Si prega di leggere di nuovo attentamente la domanda. La tua risposta non risponde alla domanda originale.
DavidPostill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.