Tôi cần tạo một tác vụ trong TS dựa trên thay đổi mức pin. Giả sử pin của tôi giảm từ 67% xuống 66% . Làm thế nào tôi có thể chạy một nhiệm vụ dựa trên sự kiện này. Windows có ghi nhật ký này không? Tôi không thể tìm thấy thông tin này ở bất cứ đâu.
Tôi cần tạo một tác vụ trong TS dựa trên thay đổi mức pin. Giả sử pin của tôi giảm từ 67% xuống 66% . Làm thế nào tôi có thể chạy một nhiệm vụ dựa trên sự kiện này. Windows có ghi nhật ký này không? Tôi không thể tìm thấy thông tin này ở bất cứ đâu.
Câu trả lời:
Windows không ghi nhật ký loại chi tiết này dưới dạng sự kiện. Tuy nhiên, bạn có thể sử dụng một cái gì đó như tệp bó bên dưới và tạo một sự kiện tùy chỉnh.
Tệp bó này giám sát mức sạc phần trăm pin hiện tại và tạo sự kiện do người dùng xác định nếu mức sạc giảm xuống dưới giá trị ngưỡng do người dùng xác định.
@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
Ghi chú:
Eventcreate
công trình lệnh trên Windows XP lên đến và bao gồm Windows 10, nó đòi hỏi quyền quản trị để làm việc_threshold
theo yêu cầu999
sẽ được tạo trong nhật ký sự kiện ỨNG DỤNG với mô tảBattery charge has dropped
eventcreate
lệnh theo yêu cầu cho tình huống của bạn.timeout
trễ theo yêu cầu cho tình huống của bạn.Ví dụ đầu ra:
Pin của tôi hiện đang sạc 81%. Tôi đặt ngưỡng là 82
. Đây là những gì xảy ra khi tôi chạy Battery.cmd
:
> battery
81
threshold reached
SUCCESS: An event of type 'WARNING' was created in the 'APPLICATION' log with 'EventCreate' as the source.
Và đây là mục mới trong Nhật ký sự kiện:
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"
Có một Microsoft-Windows-Battery
nhà cung cấp ETW có BatteryPercentRemaining
sự kiện với ID 13. Bạn có thể mã hóa dự án sử dụng TraceEvent để tạo trình nghe thời gian thực cho Microsoft-Windows-Battery
nhà cung cấp này . Sự kiện này có các mục RemainingPercentage
để hiển thị trạng thái và PercentageChange
để xem sự thay đổi:
Khi bạn thấy sự kiện này và thấy sự -1
thay đổi PercentageChange
, hãy chạy chương trình bạn muốn.
OK, tập lệnh do DavidPostill cung cấp không hoạt động. Đó là kịch bản nhỏ đẹp, nhưng mã hoặc thất thường hoặc lỗi thời.
@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
Tôi đã đề nghị chỉnh sửa này thành câu trả lời của DavidPostill, nhưng tôi không biết tại sao nó không được chấp thuận ...
findstr
... Thật quá tệ! Nghiêm túc, Microsoft? Tôi rất ấn tượng với bản hack nhỏ bẩn thỉu của DavidPostill để hoàn thành công việc.
Có một cách dễ dàng hơn nhiều để kiểm tra mức pin. Trong khu vực điều hướng chỉ cần đặt chuột lên biểu tượng pin và nó sẽ cho một tỷ lệ phần trăm.