A bit late to the conversation … but this is what I use to get the battery health of my laptops .
$InfoAlertPercent = "70"
$WarnAlertPercent = "50"
$CritAlertPercent = "20"
$BatteryHealth=""
& powercfg /batteryreport /XML /OUTPUT "batteryreport.xml"
Start-Sleep 1
[xml]$b = Get-Content batteryreport.xml
$b.BatteryReport.Batteries |
ForEach-Object{
[PSCustomObject]@{
DesignCapacity = $_.Battery.DesignCapacity
FullChargeCapacity = $_.Battery.FullChargeCapacity
BatteryHealth = [math]::floor([int64]$_.Battery.FullChargeCapacity/[int64]$_.Battery.DesignCapacity*100)
CycleCount = $_.Battery.CycleCount
Id = $_.Battery.id
}
if (([int64]$_.Battery.FullChargeCapacity/[int64]$_.Battery.DesignCapacity)*100 -gt $InfoAlertPercent){
$BatteryHealth="Great"
write-host "Battery Health is $BatteryHealth"
}elseif (([int64]$_.Battery.FullChargeCapacity/[int64]$_.Battery.DesignCapacity)*100 -and ([int64]$_.Battery.FullChargeCapacity/[int64]$_.Battery.DesignCapacity)*100 -gt $WarnAlertPercent){
$BatteryHealth="OK"
write-host "Battery Health is $BatteryHealth"
}elseif (([int64]$_.Battery.FullChargeCapacity/[int64]$_.Battery.DesignCapacity)*100 -and ([int64]$_.Battery.FullChargeCapacity/[int64]$_.Battery.DesignCapacity)*100 -gt $CritAlertPercent){
$BatteryHealth="Low"
write-host "Battery Health is $BatteryHealth"
}elseif (([int64]$_.Battery.FullChargeCapacity/[int64]$_.Battery.DesignCapacity)*100 -le $CritAlertPercent){
$BatteryHealth="Critical"
write-host "Battery Health is $BatteryHealth"
}
}