Windows Batterie Akku Status per WMI abfragen
Aus znilwiki
Changelog:
- 06.03.2018 Erste Version
- 13.04.2021 Text von Zustand 2 geändert
Vorwort
In einem Projekt benötigte ich ein Skript was den Batterie-Status einer USV abfragt. Die USV ist per USV mit dem Server verbunden und meldet sich am Windows als Batterie, inklusive des Symbols unten in der Taskleiste:
In dem Skript wollte ich abfragen
- Ob Akku oder Netzbetrieb
- Bei bestimmten Prozentzahlen (=Ladestand) andere Skripte starten
Nachfolgend findet Ihr zunächst eine Datensammlung wie man Werte abfragt und die Bedeutung der Rückgabewerte.
Im Anschluss gibt es ein Beispielskript.
Bei der Übersetzung der Werte habe ich durchaus eigene Interpretationen gewählt, die Original-Beschreibungen findet Ihr unter
https://msdn.microsoft.com/en-us/library/aa394074(v=vs.85).aspx
Abfragen
DeviceID
wmic path win32_battery get DeviceID
Rückgabewert:
Die Bezeichnung der Batterie bzw. des Gerätes, Beispiele:
Notebook ASUS : DeviceID APC-USV mit 700W: 5B1220T09591 APCBack-UPS ES 700G FW:871.O2 .I USB FW:O2
EstimatedChargeRemaining
wmic path win32_battery get EstimatedChargeRemaining
Rückgabewert:
Der Ladezustand der Batterie in % Prozent
Der Wert kann auch höher als 100 sein!
EstimatedRunTime
wmic path win32_battery get EstimatedRunTime
Rückgabewert:
Die geschätze Laufzeit in Minuten auf Grund der aktuellen Stromlast.
Liefert im Netzbetrieb ggf. zu hohe Werte, im Batteriemodus sollte der Wert stimmen, Beispiele:
Notebook ASUS (Netzbetrieb) : 71582788 (=136 Jahre) Notebook ASUS (Akkubetrieb) : 164 (=2h 44 Minuten) APC-USV mit 700W ...........: 23
Die APC liefert also immer einen echten Wert.
BatteryStatus
wmic path win32_battery get BatteryStatus
Rückgabewerte:
1 : Batterie wird entladen 2 : Stromversorgung angeschlossen, Batterie muss nicht geladen werden 3 : Batterie voll geladen 4 : Ladezustand niedrig 5 : Ladezustand kritisch 6 : Batterie wird geladen 7 : Batterie wird geladen, Ladezustand ist hoch 8 : Batterie wird geladen, Ladezustand ist niedrig 9 : Batterie wird geladen, Ladezustand ist kritisch 10 : Nicht definiert 11 : Ladezustand ist "teilweise geladen"
Skript
Hier mein Script
CheckBattery.cmd
Welches verschiedene Befehle in verschiedenen Zuständen ausführen kann.
@ECHO off
REM Skript das den Batterie-Ladezustand ausliest und ggf. reagiert
REM 2018 von Bernhard Linz / Bernhard.Linz@datagroup.defined
REM ###################
REM # Daten ermitteln #
REM ###################
REM Ladezustand der Batterie abfragen
REM findstr sucht dabei nach Zahlen und ignoriert so die erste Zeile der Rueckgabe
FOR /f "tokens=*" %%a IN ('wmic path win32_battery get EstimatedChargeRemaining ^| findstr /r "[0-9][0-9]*"') do set BATTERYCHARGINGSSTATUS=%%a
REM Die Variable enthält noch Leerzeichen - entfernen:
SET BATTERYCHARGINGSSTATUS=%BATTERYCHARGINGSSTATUS: =%
ECHO Ladezustand ist ...: %BATTERYCHARGINGSSTATUS%%%
REM BatterieStatus abfragen
REM findstr sucht dabei nach Zahlen und ignoriert so die erste Zeile der Rueckgabe
FOR /f "tokens=*" %%a IN ('wmic path win32_battery get BatteryStatus ^| findstr /r "[0-9][0-9]*"') do set BATTERYSTATUS=%%a
REM Die Variable enthält noch Leerzeichen - entfernen:
SET BATTERYSTATUS=%BATTERYSTATUS: =%
IF "%BATTERYSTATUS%"=="1" SET STATUSTEXT=Batterie wird entladen
IF "%BATTERYSTATUS%"=="2" SET STATUSTEXT=Stromversorgung angeschlossen
IF "%BATTERYSTATUS%"=="3" SET STATUSTEXT=Batterie voll geladen
IF "%BATTERYSTATUS%"=="4" SET STATUSTEXT=Ladezustand niedrig
IF "%BATTERYSTATUS%"=="5" SET STATUSTEXT=Ladezustand kritisch
IF "%BATTERYSTATUS%"=="6" SET STATUSTEXT=Batterie wird geladen
IF "%BATTERYSTATUS%"=="7" SET STATUSTEXT=Batterie wird geladen, Ladezustand ist hoch
IF "%BATTERYSTATUS%"=="8" SET STATUSTEXT=Batterie wird geladen, Ladezustand ist niedrig
IF "%BATTERYSTATUS%"=="9" SET STATUSTEXT=Batterie wird geladen, Ladezustand ist kritisch
IF "%BATTERYSTATUS%"=="10" SET STATUSTEXT=Nicht definiert
IF "%BATTERYSTATUS%"=="11" SET STATUSTEXT=Ladezustand ist "teilweise geladen"
ECHO Batterie Status ist: %BATTERYSTATUS% (%STATUSTEXT%)
REM ##############
REM # Auswertung #
REM ##############
REM 2,3 = Batterie (fast) voll + Stromversorgung vorhanden
IF "%BATTERYSTATUS%"=="2" GOTO ACPOWERED
IF "%BATTERYSTATUS%"=="3" GOTO ACPOWERED
REM 6,7,8,9 = Batterie wird geladen + Stromversorgung vorhanden
IF "%BATTERYSTATUS%"=="6" GOTO CHARGING
IF "%BATTERYSTATUS%"=="7" GOTO CHARGING
IF "%BATTERYSTATUS%"=="8" GOTO CHARGING
IF "%BATTERYSTATUS%"=="9" GOTO CHARGING
REM 1,4,5 = Batterie wird entladen + KEINE Stromversorgung
IF "%BATTERYSTATUS%"=="1" GOTO BATTERYMODE
IF "%BATTERYSTATUS%"=="4" GOTO BATTERYMODE
IF "%BATTERYSTATUS%"=="5" GOTO BATTERYMODE
REM Wenn es bis hier keinen Treffer gab direkt zum Ende springen
GOTO ENDE
REM ---------------------------------------------------------------------------------------------
:ACPOWERED
REM ####################################################
REM # Batterie (fast) voll + Stromversorgung vorhanden #
REM ####################################################
REM Befehle hier
ECHO Normalbetrieb - nichts zu tun
GOTO ENDE
REM ---------------------------------------------------------------------------------------------
:CHARGING
REM #####################################################
REM # Batterie wird geladen + Stromversorgung vorhanden #
REM #####################################################
REM Befehle hier
REM unter 51%
IF %BATTERYCHARGINGSSTATUS% LSS 51 (
ECHO Batterie unter 50%, wird geladen
REM Befehle hier
) ELSE (
ECHO Batterie über 50%, wird geladen
REM Befehle hier
)
GOTO ENDE
REM ---------------------------------------------------------------------------------------------
:BATTERYMODE
REM ##################################################
REM # Batterie wird entladen + KEINE Stromversorgung #
REM ##################################################
REM Befehle hier
IF %BATTERYCHARGINGSSTATUS% LSS 51 (
ECHO Batterie unter 50%
REM Befehle hier
) ELSE IF %BATTERYCHARGINGSSTATUS% LSS 75 (
ECHO Batterie unter 75%
REM Befehle hier
) ELSE (
ECHO Batterie zwischen 75 bis 100%
REM Befehle hier
)
GOTO ENDE
REM ---------------------------------------------------------------------------------------------
:ENDE
REM Skript beenden