Wo erhält "powercfg" Informationen zum Batteriezustand und warum nicht in WMI?

3410
tgies

Unter Windows 10 (unter anderen Versionen), das auf einem Gerät ausgeführt wird, das über eine Batterie verfügt, kann ich verwenden powercfg /batteryreport, um die "Design Capacity" und "Last Full Charge Capacity" für die Batterie zu erhalten, die eine Vorstellung von der verbleibenden Nutzungsdauer der Batterie vermitteln und wie stark ist seine Kapazität durch die Verwendung beeinträchtigt.

C:\Users\superuser\AppData\Local\Temp>powercfg /batteryreport Battery life report saved to C:\Users\superuser\AppData\Local\Temp\battery-report.html 

Der HTML-Bericht wird sofort generiert und zeigt unter anderem die Statistiken an, die mich interessieren:

powercfg battery report showing design capacity and full charge capacity

Darüber hinaus kann ich in die integrierte Diagnoseumgebung dieses Laptops einsteigen und zeigt ähnliche Werte sowie die Anzahl der Entladezyklen der Batterie an.

Woher kommen diese Werte? Ich möchte in der Lage sein, diese Akkulaufzeitdaten über einen längeren Zeitraum für eine Flotte von Laptops zu erfassen, vorzugsweise aus einem Powershell-Skript. Es schien wahrscheinlich, dass diese Daten in WMI sein sollte, und sicher genug, es gibt eine Win32_Battery Klasse mit DesignCapacityund FullChargeCapacityFelder, aber auf allen Systemen die ich getestet habe, sie sind nicht definiert:

PS C:\Users\superuser> Get-WmiObject -Class Win32_Battery | Select-Object -Property *Capacity | Format-List   DesignCapacity : FullChargeCapacity : 

Es muss einen programmatischen Weg geben, auf diese Informationen zuzugreifen, da powercfgdies der Fall ist. Wenn es dafür WMI, .NET oder Powershell gibt, würde ich das gerne wissen. Ich könnte den powercfgBericht generieren und ihn dann analysieren, aber ich möchte wirklich keine hässliche Problemumgehung implementieren, wenn es höchstwahrscheinlich einen "richtigen" Weg gibt, der mir nur aus dem Weg geht.

6
Nun, das Fenster kann diese Informationen über die ACPI von der Systemfirmware (BIOS / UEFI) abrufen: http://www.acpi.info/ https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface Frank Thomas vor 8 Jahren 0
+1 gute Frage. Ich hasse es, wenn Sachen nicht in WMI oder nicht von PowerShell verpackt sind. David Betz vor 8 Jahren 0
Dieser Kapitalisierungstrend wird lächerlich. LÖWE CHEMIE beatcracker vor 8 Jahren 0
Ah, die "CHEMIE" in den HTML-Berichten (Black Boxes) sagt LION, vermutlich bezogen auf Lithium-Ionen. Ich habe eine Weile gebraucht, um zu verstehen, was @ beatcracker's Kommentar dazu sagte. TOOGAM vor 8 Jahren 0
@ TOOGAM Also es ist nur ich dann :). Trotzdem möchte ich eine RACOON CHEMISTRY in meiner Laptop-Batterie, damit sie jede mögliche Stromquelle ergreift. beatcracker vor 8 Jahren 0

1 Antwort auf die Frage

6
beatcracker

Es sieht so aus, als müssten Sie in die Superklasse von MSBattery einsteigen :

Eine Reihe von Klassen in root \ wmi gibt Ergebnisse aus mehr als einer Klasse zurück. Das hört sich seltsam an, kann aber durch ein Beispiel erklärt werden.

Der Namespace enthält eine Reihe von Klassen, die sich auf die Batterie in Laptops beziehen

gwmi -Namespace root\wmi -List *battery*  MSBatteryClassEvent BatteryStatusChange BatteryTagChange  MSBatteryClass BatteryStaticData BatteryRuntime BatteryCycleCount  BatteryTemperature BatteryStatus BatteryFullChargedCapacity 

Wir werden das Ereignis jetzt ignorieren und die Klassen ändern. Wenn wir die MSBattery-Klasse auswählen, erhalten wir Informationen aus einer Reihe anderer Klassen, die zurückgegeben werden - MSBattery ist eine Superklasse.

PS> gwmi -Namespace root\wmi -Class MSBatteryClass | select __class  __CLASS ——- BatteryCycleCount BatteryFullChargedCapacity BatteryStaticData BatteryRuntime BatteryStatus 

Beispiele, diese Art von Arbeit an meinem Laptop:

Get-WmiObject -Namespace 'root\wmi' -Query 'select DeviceName, ManufactureName, Chemistry, DesignedCapacity from BatteryStaticData'  __GENUS : 2 __CLASS : BatteryStaticData __SUPERCLASS :  __DYNASTY :  __RELPATH :  __PROPERTY_COUNT : 4 __DERIVATION : {} __SERVER :  __NAMESPACE :  __PATH :  Chemistry : 1852787020 DesignedCapacity : 48400 DeviceName : K52F-44 ManufactureName : ASUSTek PSComputerName :    Get-WmiObject -Namespace 'root\wmi' -Query 'select FullChargedCapacity from BatteryFullChargedCapacity'  __GENUS : 2 __CLASS : BatteryFullChargedCapacity __SUPERCLASS :  __DYNASTY :  __RELPATH :  __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER :  __NAMESPACE :  __PATH :  FullChargedCapacity : 47157 PSComputerName :    Get-WmiObject -Namespace 'root\wmi' -Query 'select CycleCount from BatteryCycleCount'  __GENUS : 2 __CLASS : BatteryCycleCount __SUPERCLASS :  __DYNASTY :  __RELPATH :  __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER :  __NAMESPACE :  __PATH :  CycleCount : 0 PSComputerName :  

Warum irgendwie? Denn während das sieht man DesignedCapacity, FullChargedCapacityund CycleCounteinige Werte haben, powercfg /batteryreporttut recoginze sie:

Batteriestatistiken