Skip to main content

Before I run off and reinvent the wheel does anyone have a script that will use the Jamf Pro API to count the mobile devices and report totals by Site?

You probably want to do this by Database query as this is way more performant.

SELECT s.site_name,
       (SELECT count(*) FROM site_objects macs WHERE macs.site_id = s.site_id AND macs.object_type = 1) AS MacOSDevices,
       (SELECT count(*) FROM site_objects ios WHERE ios.site_id = s.site_id AND ios.object_type = 21) AS iOSDevices
FROM sites s

If you're like me and you use a Jamfcloud server, and you don't have database query access, the API is the only way to go. I through the following together just now but it's a total hack job. It doesn't do any error checking and the output is just a row of "xx SITE" where "xx" is the number of devices in the site and "SITE" is, well, you guessed it.

#!/bin/bash

jssURL="SOMETHING.jamfcloud.com"
userPass='USER:PASS'

deviceList=$(curl -su ${userPass} -H "Accept: text/xml" https://${jssURL}/JSSResource/mobiledevices)
for u in $(echo ${deviceList} | xmllint --format - | grep '<id>' | awk -F> '{print $2}' | awk -F< '{print $1}'); do
    curl -su ${userPass} -H "Accept: text/xml" https://${jssURL}/JSSResource/mobiledevices/id/${u} | xmllint --xpath '/mobile_device/general/site/name/text()' -
    echo ""
done | sort | uniq -c

There are probably a dozen ways to do this better and/or more efficiently. As I said, this is just what I threw together to see if I could do it. Please don't trust code from random weirdos on the internet. :-)

Chad