배터리 수준 변경을 기반으로 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 10 이상을 포함하여 Windows XP에서 작동하며 작동하려면 관리자 권한이 필요합니다_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
원하는 프로그램을 실행하십시오.
OK, 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의 더러운 작은 해킹에 감명을 받아 일을 끝냈습니다.
배터리 잔량을 확인하는 훨씬 쉬운 방법이 있습니다. 탐색 영역에서 마우스를 배터리 아이콘 위에 놓으면 백분율이 표시됩니다.