#!/bin/bash #Matthew Prins 2022 #https://github.com/MatthewPrins/Jamf/ #Deletes ALL classes in Jamf ########################### #Editable variables #Jamf credentials username="xxxxxx" password="xxxxxx" url="https://xxxxxx.jamfcloud.com" ########################### #Token function -- based on https://developer.jamf.com/jamf-pro/docs/jamf-pro-api-overview getBearerToken() { response=$(curl -s -u "$username":"$password" "$url"/api/v1/auth/token -X POST) bearerToken=$(echo "$response" | plutil -extract token raw -) tokenExpiration=$(echo "$response" | plutil -extract expires raw - | awk -F . '{print $1}') tokenExpirationEpoch=$(date -j -f "%Y-%m-%dT%T" "$tokenExpiration" +"%s") } #get token getBearerToken #pull XML data from Jamf, change it to a list #curl: pull XML data #xmllint: keep only the IDs from the XML (e.g. <id>456</id>) #1st sed: delete "<id>"s #2nd sed: replace "</id>"s with spaces #3rd sed: delete extra final space classes=$(curl --request GET \ --silent \ --url $url/JSSResource/classes \ --header 'accept: application/xml' \ --header "Authorization: Bearer ${bearerToken}" \ | xmllint --xpath "//class/id" - \ | sed 's/<id>//g' \ | sed 's/<\/id>/ /g' \ | sed 's/.$//') #get total count of classes -- counting the number of "words" in $classes numberClasses=$(echo -n "$classes" | wc -w) echo $numberClasses Classes echo echo 0 /$numberClasses #iterate over the IDs in this device group counter=0 for value in $classes; do #delete class by ID curl --request DELETE \ --silent \ --url $url/JSSResource/classes/id/$value \ --header 'accept: application/xml' \ --header "Authorization: Bearer ${bearerToken}" \ --output /dev/null #print status every 10 let "counter+=1" if [[ $(expr $counter % 2) = "0" ]] then echo $counter /$numberClasses fi #reset token every 500 if [[ $(expr $counter % 500) = "0" ]] then getBearerToken fi done echo all classes deleted