Windows event id untuk perubahan level baterai

9

Saya perlu membuat tugas dalam TS berdasarkan perubahan level baterai. Katakanlah baterai saya turun dari 67% menjadi 66% . Bagaimana saya bisa menjalankan tugas berdasarkan acara ini. Apakah Windows mencatat ini? Saya tidak dapat menemukan informasi ini di mana pun.

RiddleMeThis
sumber
Versi Windows yang mana?
DavidPostill
WIndows 10 (dan lebih disukai W7 juga)
RiddleMeThis

Jawaban:

11

Saya perlu membuat tugas di Penjadwal Tugas berdasarkan perubahan level baterai

Windows tidak mencatat detail seperti ini sebagai peristiwa. Namun Anda dapat menggunakan sesuatu seperti file batch di bawah ini dan membuat acara khusus.


Battery.cmd

File batch ini memantau muatan persentase baterai saat ini dan membuat acara yang ditentukan pengguna jika muatannya turun di bawah nilai ambang batas yang ditentukan pengguna.

@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

Catatan:

  • The Eventcreateperintah bekerja pada Windows XP sampai dengan Windows 10, itu memerlukan hak administrator untuk pekerjaan
  • Tetapkan _thresholdsesuai kebutuhan
  • Jika baterai jatuh di bawah nilai ini, suatu peristiwa dengan ID 999akan dihasilkan dalam log peristiwa APLIKASI dengan deskripsiBattery charge has dropped
  • Ubah eventcreateperintah sesuai kebutuhan untuk situasi Anda.
  • Ubah timeoutpenundaan sesuai kebutuhan untuk situasi Anda.

Contoh output:

Baterai saya saat ini memiliki muatan 81%. Saya mengatur ambang ke 82. Inilah yang terjadi ketika saya berlari Battery.cmd:

> battery
81
threshold reached

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

Dan di sini adalah entri baru di Log Peristiwa:

masukkan deskripsi gambar di sini


buat sintaksis

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"

Bacaan lebih lanjut

  • Indeks AZ dari baris perintah CMD Windows - Referensi yang sangat baik untuk semua hal yang terkait dengan Windows CMD.
  • eventcreate - Buat Acara Kustom di Windows Event Viewer.
  • schtasks - Membuat / mengedit Pekerjaan / Tugas Terjadwal. Pekerjaan dapat dibuat di komputer lokal atau jarak jauh.
  • wmic - Perintah Instrumentasi Manajemen Windows.
DavidPostill
sumber
Saya sangat menyukai ini! Dari POV Anda, lebih baik membuat acara dan menjalankan tugas berbasis peristiwa (mis. Skrip PS)? Atau ... modifikasi skrip ini untuk menjalankan skrip PS saya, jika level baterai turun 1%. Saya berasumsi bahwa Windows membuat acara untuk perubahan level baterai. Saya tidak memikirkan pendekatan ini, yang mungkin lebih baik.
RiddleMeThis
1
@MiHa Terserah Anda. Mana yang paling mudah dipahami dan dipelihara :)
DavidPostill
6

Ada Microsoft-Windows-Batterypenyedia ETW dengan BatteryPercentRemainingacara dengan ID 13. Anda dapat membuat kode proyek yang menggunakan TraceEvent untuk membuat pendengar waktu nyata untuk Microsoft-Windows-Batterypenyedia ini . Acara memiliki entri RemainingPercentageuntuk menunjukkan status dan PercentageChangemelihat perubahan:

masukkan deskripsi gambar di sini

Ketika Anda melihat acara ini dan melihat -1perubahannya PercentageChange, jalankan program yang Anda inginkan.

magicandre1981
sumber
2

Oke, skrip yang disediakan oleh DavidPostill tidak berfungsi. Ini skrip kecil yang bagus, tetapi kodenya tidak menentu atau ketinggalan jaman.

Inilah yang sudah diperbaiki:

@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

Saya menyarankan suntingan ini ke dalam jawaban DavidPostill, tetapi saya tidak tahu mengapa itu tidak disetujui ...

AneesAhmed777
sumber
Dia menempatkan saya di jalur yang benar, itulah sebabnya saya menerima jawabannya, tetapi terima kasih banyak! untuk skrip tetap Anda.
RiddleMeThis
Sambil memperbaiki kode, saya menyadari betapa buggy dan salahnya findstr... Terlalu buruk! Seriuosly, Microsoft? Saya terkesan dengan hack kecil kotor DavidPostill untuk menyelesaikan pekerjaan.
AneesAhmed777
0

Ada cara yang jauh lebih mudah untuk memeriksa level baterai. Di area navigasi cukup letakkan mouse di atas ikon baterai dan itu akan memberikan persentase.

Gary Weinstein
sumber
Ya, tapi bukan itu yang saya inginkan ... Saya ingin memonitor level baterai secara otomatis dan berdasarkan level baterai melakukan beberapa hal (otomatis lagi)
RiddleMeThis
Silakan baca pertanyaan itu lagi dengan seksama. Jawaban Anda tidak menjawab pertanyaan awal.
DavidPostill