Skip to main content

Battery capacity under Hardware section shows 1% in Jamf Pro 11 (not sure if this issue existed prior).

When I look in System Information, it's at 94%.

 

Information in Jamf Pro is only as current as the last inventory of the computer, which is once per week by default. It’s not live.


Sure. I should've mentioned that I ran recon manually and the information stayed the same.


Funnily enough I was asked to gather battery health information last week, and found the same thing where the battery capacity often reported wrong (only on Apple Silicon from what I can see).  I whipped up the following extension attribute script to gather what we need.  There's a list of Intel MacBooks we care about, with their factory battery capacity, whereas Apple Silicon reports this information differently, so no list needed for them:

#!/bin/bash #The list of Intel models we know factory battery capacity for models="MacBookPro11,1:6330|MacBookPro11,2:8440|MacBookPro11,3:8440|MacBookPro11,4:8755|MacBookPro11,5:8755|MacBookPro12,1:6559|MacBookPro13,1:4781|MacBookPro13,2:4314|MacBookPro13,3:6667|MacBookPro14,1:4781|MacBookPro14,2:4314|MacBookPro14,3:6667|MacBookPro15,1:7336|MacBookPro15,2:5086|MacBookPro15,3:7336|MacBookPro15,4:5103|MacBookPro16,1:8790|MacBookPro16,2:5086|MacBookPro16,3:5103|MacBookPro16,4:8790|MacBookAir6,1:5100|MacBookAir6,2:7150|MacBookAir5,1:5100|MacBookAir7,2:7150|MacBookAir8,1:4379|MacBookAir8,2:4379|MacBookAir9,1:4379|MacBookAir6,1:5100" #The result of the script scriptResult="" #Get the hardware information intelCPU=$(sysctl -n machdep.cpu.brand_string | grep -ci Intel) modelID=$(system_profiler SPHardwareDataType | grep "^ *Model Identifier" | sed "s|^ *Model Identifier: *||") #Check for an Intel CPU if [[ ! $intelCPU -eq 0 ]] then #Check for a matching Intel laptop model modelMatch=$(echo "$models" | grep "$modelID" | sed "s|^.*\\($modelID:[0-9]*\\).*$|\\1|") #If there was a match, then calculate the battery health based on the new capacity vs. the reported current capacity if [[ ${#modelMatch} -gt 0 ]] then #Get the power data powerData=$(system_profiler SPPowerDataType) #Get the factory capacity newCapacity=$(echo "$modelMatch" | cut -d ':' -f2) #Get the reported current capacity currentCapacity=$(echo "$powerData" | grep "^ *Full Charge Capacity" | sed "s|^ *Full Charge Capacity (mAh): *||") #Get the reported current cycle count currentCycles=$(echo "$powerData" | grep "^ *Cycle Count" | sed "s|^ *Cycle Count: *||") #Get the reported battery condition condition=$(echo "$powerData" | grep "^ *Condition" | sed "s|^ *Condition: *||") #Figure out the battery health as a percentage batteryHealth=$(echo "scale=2; $currentCapacity / $newCapacity * 100" | bc | cut -d '.' -f1) batteryHealth="$batteryHealth""%" #The cycle information cycles="$currentCycles""/1000" else #No match, so this model we don't care about since it's either too old, or a desktop scriptResult="N/A" fi else #This is an Apple Silicon CPU, so get the information differently #Get the power data powerData=$(system_profiler SPPowerDataType) #Get the battery health as a percentage batteryHealth=$(echo "$powerData" | grep "^ *Maximum Capacity" | sed "s|^ *Maximum Capacity: *||") #If the battery health information exists, then process it, otherwise this is a desktop so report "N/A" if [[ ! ${#batteryHealth} -eq 0 ]] then #Get the reported current cycle count currentCycles=$(echo "$powerData" | grep "^ *Cycle Count" | sed "s|^ *Cycle Count: *||") #Get the reported battery condition condition=$(echo "$powerData" | grep "^ *Condition" | sed "s|^ *Condition: *||") #The cycle information cycles="$currentCycles""/1000" else scriptResult="N/A" fi fi #If the result earlier was not "N/A" then put together the result string to report to Jamf if [[ ${#scriptResult} -eq 0 ]] then scriptResult="Battery Health: $batteryHealth Cycles: $cycles Condition: $condition" fi echo "<result>$scriptResult</result>"

 

 


Cool script.  

I think it can be accomplished in one line though.  This EA works for Big Sur through Sequoia; it returns an integer if there is a battery, and a null value if it's a desktop.

https://happymacadmin.wordpress.com/2024/10/10/read-a-macs-battery-health-with-the-pmset-utility/