6

В Windows 10 (среди других версий), работающей на устройстве с батареей, я могу использовать powercfg /batteryreport для получения "Емкость дизайна" и "Емкость последней полной зарядки" для батареи, которые дают представление об оставшемся полезном сроке службы батареи и насколько ее емкость ухудшилась от использования.

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

HTML-отчет генерируется мгновенно и отображает, помимо прочего, интересующую меня статистику:

Отчет о батарее powercfg с указанием проектной емкости и полной зарядной емкости

Кроме того, я могу загрузить встроенную диагностическую среду этого ноутбука, и она отображает похожие цифры и количество циклов разрядки батареи.

Откуда эти значения получены? Я хотел бы иметь возможность отслеживать эти данные о времени автономной работы для парка ноутбуков, предпочтительно по сценарию Powershell. Казалось вероятным , что эти данные должны быть в WMI, и конечно же , есть класс Win32_Battery , имеющий DesignCapacity и FullChargeCapacity поле, но и на все системы я испытал, они не определены:

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


DesignCapacity     :
FullChargeCapacity :

Должен быть какой-то программный способ доступа к этой информации, потому что powercfg делает это. Если для этого есть какой-нибудь способ WMI, .NET или Powershell, я бы хотел узнать об этом. Я мог бы сгенерировать отчет powercfg и затем проанализировать его, но я действительно не хочу внедрять уродливый обходной путь, когда, скорее всего, существует "правильный" способ сделать это, который просто ускользает от меня.

1 ответ1

6

Похоже, вам нужно копаться в суперклассе MSBattery:

Несколько классов в корне \wmi возвращают результаты более чем одного класса. Это звучит странно, но это можно объяснить на примере.

Пространство имен содержит ряд классов, связанных с батареей в ноутбуках

gwmi -Namespace root\wmi -List *battery*

MSBatteryClassEvent
BatteryStatusChange
BatteryTagChange 
MSBatteryClass
BatteryStaticData
BatteryRuntime
BatteryCycleCount 
BatteryTemperature
BatteryStatus
BatteryFullChargedCapacity

Мы пока проигнорируем событие и изменим классы. Если мы выберем класс MSBattery, мы получим информацию из ряда других возвращенных классов - MSBattery - это суперкласс.

PS> gwmi -Namespace root\wmi -Class MSBatteryClass | select __class

__CLASS  ——-
BatteryCycleCount
BatteryFullChargedCapacity
BatteryStaticData
BatteryRuntime BatteryStatus

Примеры такой работы на моем ноутбуке:

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   : 

Почему вроде? Поскольку, хотя вы можете видеть, что DesignedCapacity , FullChargedCapacity и CycleCount имеют некоторые значения, powercfg /batteryreport не распознает их:

Статистика батареи

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .