Projects/OSDScripts/Scripts/HP/BatteryInfo.ps1

<# Gary Blok | @gwblok | GARYTOWN.COM
 
This just grabs a bunch of information from WMI about the Battery. Typically this information would be used with other processes. Just recording where to find the info
 
#>


$namespace = "ROOT\cimv2"
$EstimatedChargeRemaining = (Get-CimInstance -Namespace $namespace -ClassName "Win32_Battery").EstimatedChargeRemaining
$EstimatedRunTime = (Get-CimInstance -Namespace $namespace -ClassName "Win32_Battery").EstimatedRunTime


$namespace = "ROOT\WMI"
$CycleCount = (Get-CimInstance -Namespace $namespace -ClassName "BatteryCycleCount").CycleCount
$FullChargedCapacity = (Get-CimInstance -Namespace $namespace -ClassName "BatteryFullChargedCapacity").FullChargedCapacity
$EstimatedRuntime2 = (Get-CimInstance -Namespace $namespace -ClassName "BatteryRuntime").EstimatedRuntime
$DesignedCapacity = (Get-WmiObject  -Namespace $namespace -ClassName "BatteryStaticData").DesignedCapacity
$SerialNumber = (Get-WmiObject  -Namespace $namespace -ClassName "BatteryStaticData").SerialNumber
$ManufactureName = (Get-WmiObject  -Namespace $namespace -ClassName "BatteryStaticData").ManufactureName
$DischargeRate = (Get-CimInstance -Namespace $namespace -ClassName "BatteryStatus").DischargeRate
$Discharging = (Get-CimInstance -Namespace $namespace -ClassName "BatteryStatus").Discharging
$Charging = (Get-CimInstance -Namespace $namespace -ClassName "BatteryStatus").Charging
$PowerOnline = (Get-CimInstance -Namespace $namespace -ClassName "BatteryStatus").PowerOnline
$Voltage = (Get-CimInstance -Namespace $namespace -ClassName "BatteryStatus").Voltage
$RemainingCapacity = (Get-CimInstance -Namespace $namespace -ClassName "BatteryStatus").RemainingCapacity
$Temperature = (Get-WmiObject -Namespace $namespace -ClassName "BatteryTemperature").Temperature #Doesn't Work

#Device Info
$ManufactureName = (Get-WmiObject  -Namespace $namespace -ClassName "MSBatteryClass").ManufactureName
$ComputerModel = (Get-WmiObject -Class:Win32_ComputerSystem).Model
$HPProdCode = (Get-CimInstance -Namespace root/cimv2 -ClassName Win32_BaseBoard).Product
$Serial = (Get-WmiObject -class:win32_bios).SerialNumber

#Get Battery Temperature
#https://stackoverflow.com/questions/45736193/how-can-we-get-a-cpu-temperature-through-wmi
$Temps = Get-CimInstance -Namespace root/wmi -ClassName MsAcpi_ThermalZoneTemperature -Filter "Active='True' and CurrentTemperature<>2732" -Property InstanceName, CurrentTemperature |
    Select-Object InstanceName, @{n='CurrentTemperatureC';e={'{0:n0}' -f (($_.CurrentTemperature - 2732) / 10.0)}}, @{n='CurrentTemperatureF';e={'{0:n0}' -f ((($_.CurrentTemperature - 2732) / 10.0 *1.8) + 32)}}
$BatteryTemp = $Temps | Where-Object {$_.InstanceName -match "BATZ"}

Write-Host "Device Info" -ForegroundColor Green
Write-Output "Computer Model: $ComputerModel | $HPProdCode"
#Write-Output "Serial: $Serial"

Write-Host "Battery Status" -ForegroundColor Green
Write-Output "EstimatedChargeRemaining: $EstimatedChargeRemaining %"
#These next two are basically the same, but they come from different WMI Namespaces.
if ($Discharging -eq $true){
    Write-Output "EstimatedRunTime: $EstimatedRunTime minutes" #Win32_Battery
    Write-Output "EstimatedRunTime: $EstimatedRunTime2 seconds" #BatteryRuntime
}
Write-Output ""


Write-Output "DischargeRate: $DischargeRate"
Write-Output "Discharging: $Discharging"
Write-Output "Charging: $Charging"
Write-Output "PowerOnline: $PowerOnline"
Write-Output "Voltage: $Voltage"
Write-Output "Temp: F: $($BatteryTemp.CurrentTemperatureF) | C: $($BatteryTemp.CurrentTemperatureC)"
Write-Output ""
Write-Host "Battery Design and Capacity Status"  -ForegroundColor Green
Write-Output "DesignedCapacity: $([math]::Round($DesignedCapacity / 1000)) WHr"
Write-Output "FullChargedCapacity: $([math]::Round($FullChargedCapacity / 1000)) WHr"
Write-Output "RemainingCapacity: $([math]::Round($RemainingCapacity / 1000)) WHr"
Write-Output "Battery Degraded : $([math]::Round(100 - (($FullChargedCapacity / $DesignedCapacity)*100))) %"

Write-Output "CycleCount: $CycleCount"

Write-Output ""
Write-Host "Battery Details"  -ForegroundColor Green
Write-Output "SerialNumber: $SerialNumber"
Write-Output "ManufactureName: $ManufactureName"