รหัสเหตุการณ์ Windows สำหรับการเปลี่ยนระดับแบตเตอรี่


9

ฉันต้องการสร้างงานใน TS ตามการเปลี่ยนแปลงระดับแบตเตอรี่ สมมติว่าแบตเตอรี่ของฉันลดลงจาก67%ไป66% ฉันจะรันงานตามกิจกรรมนี้ได้อย่างไร Windows บันทึกสิ่งนี้ไว้หรือไม่? ฉันไม่สามารถหาข้อมูลนี้ได้ทุกที่


Windows รุ่นใด
DavidPostill

WIndows 10 (และควรเลือก W7 ด้วย)
RiddleMe

คำตอบ:


11

ฉันต้องสร้างงานใน Task Scheduler ตามการเปลี่ยนระดับแบตเตอรี่

Windows จะไม่บันทึกรายละเอียดประเภทนี้เป็นเหตุการณ์ อย่างไรก็ตามคุณสามารถใช้ไฟล์แบตช์ด้านล่างและสร้างเหตุการณ์ที่กำหนดเองได้


Battery.cmd

ไฟล์แบตช์นี้จะตรวจสอบการชาร์จเปอร์เซ็นต์แบตเตอรี่ในปัจจุบันและสร้างเหตุการณ์ที่ผู้ใช้กำหนดหากค่าใช้จ่ายลดลงต่ำกว่าค่าเกณฑ์ที่ผู้ใช้กำหนด

@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

หมายเหตุ:

  • Eventcreateคำสั่งงานบน Windows XP และรวมถึงวินโดวส์ 10 ก็ต้องใช้สิทธิ์ของผู้ดูแลในการทำงาน
  • ตั้งค่า_thresholdตามต้องการ
  • หากแบตเตอรี่ต่ำกว่าค่านี้เหตุการณ์ที่มี ID 999จะถูกสร้างขึ้นในบันทึกเหตุการณ์ APPLICATION พร้อมคำอธิบายBattery charge has dropped
  • แก้ไขeventcreateคำสั่งตามต้องการสำหรับสถานการณ์ของคุณ
  • แก้ไขtimeoutความล่าช้าตามที่จำเป็นสำหรับสถานการณ์ของคุณ

ตัวอย่างผลลัพธ์:

ปัจจุบันแบตเตอรี่ของฉันมีประจุอยู่ที่ 81% 82ผมตั้งเกณฑ์เพื่อ นี่คือสิ่งที่เกิดขึ้นเมื่อฉันทำงานBattery.cmd:

> battery
81
threshold reached

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

และนี่คือรายการใหม่ในบันทึกเหตุการณ์:

ป้อนคำอธิบายรูปภาพที่นี่


ไวยากรณ์เหตุการณ์ที่เกิดขึ้น

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"

อ่านเพิ่มเติม

  • ดัชนี AZ ของบรรทัดคำสั่ง Windows CMD - การอ้างอิงที่ยอดเยี่ยมสำหรับทุกสิ่งที่เกี่ยวข้องกับ Windows cmd line
  • eventcreate - สร้างเหตุการณ์ที่กำหนดเองใน Windows Event Viewer
  • schtasks - สร้าง / แก้ไขงานที่กำหนด / งาน สามารถสร้างงานได้บนโลคัลหรือคอมพิวเตอร์ระยะไกล
  • wmic - คำสั่งเครื่องมือการจัดการของ Windows

ฉันชอบสิ่งนี้มาก! จากมุมมองของคุณจะดีกว่าถ้าสร้างกิจกรรมและเรียกใช้งานตามกิจกรรม (เช่นสคริปต์ PS) หรือ ... แก้ไขสคริปต์นี้เพื่อเรียกใช้สคริปต์ PS ของฉันหากระดับแบตเตอรี่ลดลง 1% ฉันสันนิษฐานว่า Windows กำลังสร้างกิจกรรมเพื่อเปลี่ยนระดับแบตเตอรี่ ฉันไม่ได้คิดถึงวิธีการนี้ซึ่งอาจจะดีกว่า
RiddleMeThis

1
@MiHa แล้วแต่คุณ วิธีที่ง่ายที่สุดในการทำความเข้าใจและบำรุงรักษา :)
DavidPostill


6

มีMicrosoft-Windows-Batteryผู้ให้บริการ ETW ที่มีBatteryPercentRemainingเหตุการณ์ที่มี ID 13 คุณสามารถโค้ดโครงการที่ใช้TraceEventเพื่อสร้างฟังแบบเรียลไทม์สำหรับMicrosoft-Windows-Batteryผู้ให้บริการนี้ เหตุการณ์มีรายการRemainingPercentageเพื่อแสดงสถานะและPercentageChangeเพื่อดูการเปลี่ยนแปลง:

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อคุณเห็นเหตุการณ์นี้และเห็นการ-1เปลี่ยนแปลงให้PercentageChangeเรียกใช้โปรแกรมที่คุณต้องการ


2

ตกลงสคริปต์ที่จัดทำโดย DavidPostill ไม่ทำงาน มันเป็นสคริปต์ตัวเล็ก ๆ ที่ดี แต่รหัสนั้นผิดปกติหรือล้าสมัย

นี่คือหนึ่งคงที่:

@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

ฉันแนะนำการแก้ไขนี้ในคำตอบของ DavidPostill แต่ฉันไม่รู้ว่าทำไมมันถึงไม่ผ่านการอนุมัติ ...


เขาวางฉันในการติดตามที่ถูกต้องซึ่งเป็นเหตุผลที่ฉันยอมรับคำตอบของเขา แต่ขอบคุณมาก! สำหรับสคริปต์คงที่ของคุณ
RiddleMe นี่

ในขณะที่แก้ไขรหัสฉันมาเพื่อตระหนักถึงความผิดพลาดและบั๊กกี้ว่าเป็นอย่างไรfindstr... เลวร้ายเกินไป! Seriuosly, Microsoft? ฉันประทับใจกับแฮ็คเล็ก ๆ น้อย ๆ ที่สกปรกของ DavidPostill เพื่อทำงานให้สำเร็จ
AneesAhmed777

0

มีวิธีที่ง่ายกว่ามากในการตรวจสอบระดับแบตเตอรี่ ในพื้นที่การนำทางเพียงแค่วางเมาส์ไว้เหนือไอคอนแบตเตอรี่และจะให้เปอร์เซ็นต์


ใช่ แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ ... ฉันต้องการตรวจสอบระดับแบตเตอรี่โดยอัตโนมัติและตามระดับแบตเตอรี่ทำบางสิ่ง (โดยอัตโนมัติอีกครั้ง)
RiddleMe

โปรดอ่านคำถามอีกครั้งอย่างระมัดระวัง คำตอบของคุณคือไม่ตอบคำถามเดิม
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.