When I switched to Apple’s DEP deployment program there became a need to import the asset data for our devices. Previously asset tags were assigned to a device, then during the manual imaging process the name was input into Casper Imaging, a Jamf Pro product.
A major part of the appeal of DEP is the ability to hand off the device to your user straight away, fresh, out of the box. IT never has to lay a hand on the device, but you do need to do a bit of work in the background to make it all flow smoothly. I’ll elaborate on the DEP process in another post.
The script below is one that I use after the devices have been received by the users and setup. After the setup process the device has a name like “Jacobs Macbook Air”, but we want it to have the asset tag we’ve assigned in our asset management software.
The script takes a csv file arranged in the following order.
Serial Number, Asset Tag, Username
It is quite specific to my environment, but you could easily adapt it to suit your own requirements.
# Variables go here. API account can't write to the JSS directly so don't try, it'll fail apiUsername='zzz' apiPassword='zzz' jssServer='https://zzz.com:443' file="$1" #Verify we can read the file data=`cat $file` if [[ "$data" == "" ]]; then echo "Unable to read the file path specified" echo "Ensure there are no spaces and that the path is correct" exit 1 fi #Find how many computers to import computerqty=`awk -F, 'END {printf "%s\n", NR}' $file` #computerqty=$((computerqty-1)) echo "Preparing to update $computerqty computers" #Set a counter for the loop counter="0" duplicates=[] id=$((id+1)) #Loop through the CSV and submit data to the API while [ $counter -lt $computerqty ] do counter=$[$counter+1] line=`echo "$data" | head -n $counter | tail -n 1` serialNumber=`echo "$line" | awk -F , '{print $1}'` assetTag=`echo "$line" | awk -F , '{print $2}'` user=`echo "$line" | awk -F , '{print $3}'` echo $serialNumber echo $assetTag echo $user echo "##########################################" echo "Attempting to update data for $serialNumber" apiData="$assetTag" userName="$user" output=`curl -s -k -u "${apiUsername}:${apiPassword}" -H "Content-Type: application/xml" -X 'PUT' -H "Content-Type: text/xml" -d "$apiData" "${jssServer}/JSSResource/computers/serialnumber/${serialNumber}"` addUserName=`curl -s -k -u "${apiUsername}:${apiPassword}" -H "Content-Type: application/xml" -X 'PUT' -H "Content-Type: text/xml" -d "$userName" "${jssServer}/JSSResource/computers/serialnumber/${serialNumber}"` #echo $output echo "Serial number is: $serialNumber" echo "Asset Tag is: $assetTag" echo "Username is: $user" #echo "Api Data is: ${apiData}" #Error Checking error="" error=`echo $output | grep "Conflict"` if [[ $error != "" ]]; then duplicates+=($serialNumber) fi #Increment the ID variable for the next user id=$((id+1)) done echo "The following computers could not be updated:" printf -- '%s\n' "${duplicates[@]}" exit 0