ฉันต้องการสร้างงานใน TS ตามการเปลี่ยนแปลงระดับแบตเตอรี่ สมมติว่าแบตเตอรี่ของฉันลดลงจาก67%ไป66% ฉันจะรันงานตามกิจกรรมนี้ได้อย่างไร Windows บันทึกสิ่งนี้ไว้หรือไม่? ฉันไม่สามารถหาข้อมูลนี้ได้ทุกที่
ฉันต้องการสร้างงานใน TS ตามการเปลี่ยนแปลงระดับแบตเตอรี่ สมมติว่าแบตเตอรี่ของฉันลดลงจาก67%ไป66% ฉันจะรันงานตามกิจกรรมนี้ได้อย่างไร Windows บันทึกสิ่งนี้ไว้หรือไม่? ฉันไม่สามารถหาข้อมูลนี้ได้ทุกที่
คำตอบ:
Windows จะไม่บันทึกรายละเอียดประเภทนี้เป็นเหตุการณ์ อย่างไรก็ตามคุณสามารถใช้ไฟล์แบตช์ด้านล่างและสร้างเหตุการณ์ที่กำหนดเองได้
ไฟล์แบตช์นี้จะตรวจสอบการชาร์จเปอร์เซ็นต์แบตเตอรี่ในปัจจุบันและสร้างเหตุการณ์ที่ผู้ใช้กำหนดหากค่าใช้จ่ายลดลงต่ำกว่าค่าเกณฑ์ที่ผู้ใช้กำหนด
@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
ตามต้องการ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"
มีMicrosoft-Windows-Battery
ผู้ให้บริการ ETW ที่มีBatteryPercentRemaining
เหตุการณ์ที่มี ID 13 คุณสามารถโค้ดโครงการที่ใช้TraceEventเพื่อสร้างฟังแบบเรียลไทม์สำหรับMicrosoft-Windows-Battery
ผู้ให้บริการนี้ เหตุการณ์มีรายการRemainingPercentage
เพื่อแสดงสถานะและPercentageChange
เพื่อดูการเปลี่ยนแปลง:
เมื่อคุณเห็นเหตุการณ์นี้และเห็นการ-1
เปลี่ยนแปลงให้PercentageChange
เรียกใช้โปรแกรมที่คุณต้องการ
ตกลงสคริปต์ที่จัดทำโดย 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 แต่ฉันไม่รู้ว่าทำไมมันถึงไม่ผ่านการอนุมัติ ...
findstr
... เลวร้ายเกินไป! Seriuosly, Microsoft? ฉันประทับใจกับแฮ็คเล็ก ๆ น้อย ๆ ที่สกปรกของ DavidPostill เพื่อทำงานให้สำเร็จ
มีวิธีที่ง่ายกว่ามากในการตรวจสอบระดับแบตเตอรี่ ในพื้นที่การนำทางเพียงแค่วางเมาส์ไว้เหนือไอคอนแบตเตอรี่และจะให้เปอร์เซ็นต์