배터리 잔량 변경을위한 Windows 이벤트 ID


9

배터리 수준 변경을 기반으로 TS에서 작업을 만들어야합니다. 배터리가 67 % 에서 66 %로 감소했다고 가정 해 보겠습니다 . 이 이벤트를 기반으로 작업을 어떻게 실행할 수 있습니까? Windows가 이것을 전혀 기록하지 않습니까? 이 정보를 어디서나 찾을 수 없었습니다.


어떤 버전의 Windows입니까?
DavidPostill

윈도우 10 (바람직 W7도)
RiddleMeThis

답변:


11

배터리 수준 변경을 기반으로 작업 스케줄러에서 작업을 만들어야합니다

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 10 이상을 포함하여 Windows XP에서 작동하며 작동하려면 관리자 권한이 필요합니다
  • _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 구문

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"

추가 자료

  • Windows CMD 명령 행의 AZ 색인 -Windows cmd 행과 관련된 모든 것에 대한 훌륭한 참조 자료.
  • eventcreate -Windows 이벤트 뷰어에서 사용자 정의 이벤트를 작성하십시오.
  • schtasks- 예약 된 작업 / 작업을 생성 / 편집합니다. 로컬 또는 원격 컴퓨터에서 작업을 생성 할 수 있습니다.
  • wmic -Windows 관리 인스 트루먼 테이션 명령.

나는 이것을 정말로 좋아한다! POV에서 이벤트를 생성하고 이벤트 기반 작업 (예 : PS 스크립트)을 실행하는 것이 더 낫습니까? 또는 ... 배터리 잔량이 1 % 감소한 경우이 스크립트를 수정하여 PS 스크립트를 실행하십시오. Windows가 배터리 수준 변경을위한 이벤트를 생성한다고 가정했습니다. 나는이 접근법에 대해 생각하지 않았다.
RiddleMeThis

1
@MiHa 당신에게 달려 있습니다. 이해하고 유지하는 것이 가장 쉬운 방법 :)
DavidPostill


6

Microsoft-Windows-Battery와 ETW 공급자 BatteryPercentRemainingID (13) 당신이 사용하는 프로젝트 코딩 할 수 있습니다와 이벤트 TraceEvent을 만들 실시간 청취자를 이에 대한 Microsoft-Windows-Battery제공 업체. 이벤트에는 RemainingPercentage상태 PercentageChange를 표시하고 변경 사항을 볼 수있는 항목 이 있습니다.

여기에 이미지 설명을 입력하십시오

이 이벤트가 표시되고에 대한 -1변경 사항 이 표시되면 PercentageChange원하는 프로그램을 실행하십시오.


2

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의 답변 에이 편집을 제안했지만 왜 승인되지 않았는지 모르겠습니다 ...


그는 나를 올바른 길로 안내했다. 그래서 나는 그의 대답을 받아 들였다. 그러나 대단히 감사한다! 당신의 고정 스크립트.
RiddleMe 이것은

코드를 수정하는 동안 나는 버그가 있고 오류가 있음을 깨닫게되었습니다 findstr... 너무 나쁩니다! Seriuosly, Microsoft? DavidPostill의 더러운 작은 해킹에 감명을 받아 일을 끝냈습니다.
AneesAhmed777

0

배터리 잔량을 확인하는 훨씬 쉬운 방법이 있습니다. 탐색 영역에서 마우스를 배터리 아이콘 위에 놓으면 백분율이 표시됩니다.


네,하지만 그게 정말로 내가 원하는 것을 ... 나는 자동으로 배터리 수준을 모니터링하고 싶어하고 (자동으로 다시) 몇 가지 물건을 배터리 수준에 따라
RiddleMeThis

질문을주의 깊게 다시 읽으십시오. 귀하의 답변은 원래 질문에 대한 답변이 아닙니다 .
DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.