tgi*_*ies 9 windows battery powershell wmi powercfg
在装有电池的设备上运行的 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
Run Code Online (Sandbox Code Playgroud)
HTML 报告是即时生成的,并显示我感兴趣的统计数据等:
此外,我可以启动到这台笔记本电脑的内置诊断环境,它显示类似的数字,以及电池的放电周期数。
这些值是从哪里获得的?我希望能够随着时间的推移跟踪一组笔记本电脑的电池寿命数据,最好是通过 Powershell 脚本。这些数据似乎应该在 WMI 中,果然,有一个Win32_Battery 类具有DesignCapacity
和FullChargeCapacity
字段,但在我测试过的所有系统上,它们都是未定义的:
PS C:\Users\superuser> Get-WmiObject -Class Win32_Battery | Select-Object -Property *Capacity | Format-List
DesignCapacity :
FullChargeCapacity :
Run Code Online (Sandbox Code Playgroud)
必须有一些程序化的方式来访问这些信息,因为powercfg
正在这样做。如果有一些 WMI、.NET 或 Powershell 方法可以做到这一点,我想知道。我可以生成powercfg
报告然后解析它,但我真的不想实施一个丑陋的解决方法,当最有可能有一种“正确”的方法来做它只是逃避我。
看起来您必须深入研究MSBattery 超类:
root\wmi 中的许多类返回来自多个类的结果。这听起来很奇怪,但可以通过一个例子来解释。
命名空间包含许多与笔记本电脑电池相关的类
Run Code Online (Sandbox Code Playgroud)gwmi -Namespace root\wmi -List *battery* MSBatteryClassEvent BatteryStatusChange BatteryTagChange MSBatteryClass BatteryStaticData BatteryRuntime BatteryCycleCount BatteryTemperature BatteryStatus BatteryFullChargedCapacity
我们将暂时忽略该事件并更改类。如果我们选择 MSBattery 类,我们会从返回的许多其他类中获得信息——MSBattery 是一个超类。
Run Code Online (Sandbox Code Playgroud)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 :
Run Code Online (Sandbox Code Playgroud)
为什么是那种?因为虽然你可以看到DesignedCapacity
, FullChargedCapacity
并CycleCount
有一些价值,但并powercfg /batteryreport
没有识别它们: