バッテリーレベル変更のWindowsイベントID


9

バッテリーレベルの変化に基づいてTSでタスクを作成する必要があります。バッテリーが67%から66%に低下したとしましょう。このイベントに基づいてタスクを実行するにはどうすればよいですか。Windowsはこれをログに記録しますか?この情報はどこにも見つかりませんでした。


どのバージョンのWindowsですか?
DavidPostill

Windows 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

ノート:

  • EventcreateWindowsの10までを含むのWindows XP上のコマンドの動作は、それが仕事に管理者権限が必要です
  • _threshold必要に応じて設定
  • バッテリーがこの値を下回ると、IDの付いたイベントが999APPLICATIONイベントログに説明とともに生成されます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 Management Instrumentationコマンド。

私は本当にこれが好きです!POVから、イベントを作成し、イベントベースのタスク(PSスクリプトなど)を実行する方が良いですか?または...バッテリーレベルが1%低下した場合は、このスクリプトを変更してPSスクリプトを実行します。Windowsがバッテリーレベル変更のイベントを作成していると想定しました。私はこのアプローチについては考えていませんでした。
RiddleMeThis

1
@MiHaあなた次第。理解し、維持するのが最も簡単な方:)
DavidPostill


6

イベントがID 13のMicrosoft-Windows-BatteryETWプロバイダーがありBatteryPercentRemainingます。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の回答に提案しましたが、なぜそれが承認されなかったのかわかりません...


彼は私を正しい軌道に乗せたので、彼の答えを受け入れましたが、どうもありがとうございました!あなたの固定スクリプトのために。
RiddleMeThis 2017年

コードを修正していると、バグfindstrが多く誤っていることがわかりました。せっかく、マイクロソフト?私は仕事を成し遂げるためのDavidPostillの汚い小さなハックに感銘を受けました。
AneesAhmed777 2017年

0

バッテリー残量を確認する簡単な方法があります。ナビゲーションエリアで、バッテリーアイコンの上にマウスを置くだけで、パーセンテージが表示されます。


はい、しかしそれは本当に私が望んでいたことではありません...バッテリレベルを自動的に監視し、バッテリレベルに基づいて(再び自動的に)いくつかのことを行いたかったのです
RiddleMeThis

もう一度質問をよく読んでください。あなたの答えは元の質問には答えませ
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.