I recently saw an issue where several computers in Jamf Pro were showing up with the same serial number listed in their inventory records. This made it difficult to work with this serial number using the API because Jamf Pro Classic API calls may fail if we’re referencing the serial number in the API call and more than one inventory record exists with that serial number.
First off, how can this happen? Aren’t serial numbers supposed to be unique? They are, but there’s two instances where serial numbers may unfortunately be associated with more than one Mac.
Hardware repair:
When you send a Mac out for repair and the logic board is replaced as part of the repair, the Mac’s existing serial number is flashed onto the replacement logic board.
However, both the old and new logic boards have separate Unique Device Identifiers (UDID) associated with them. When enrolling a device into Jamf Pro, it is possible for a new inventory record to be set up if a device has:
- The same serial number listed in as an existing inventory record
- A UDID not found in other inventory records
Parallels macOS virtual machine:
macOS virtual machines set up by Parallels Desktop and other Parallels hypervisor products use the same serial number as the Mac which is running the Parallels hypervisor software. These VMs will likewise have separate Hardware UDIDs associated with them.
So what to do with these duplicate records? My recommendation is to delete them from your Jamf Pro server when you find them, especially if you do a lot of work using the API. To help with this task, a script has been developed to identify and delete unwanted duplicates. For more details, please see below the jump.
This script downloads all computer inventory records from a Jamf Pro server. The list of records is then parsed for inventory records with the same Apple serial number as at least one other record.
Once the duplicate serial numbers are identified, the script takes the following actions:
- Loop through the duplicate serial number list and get all of the associated Jamf Pro computer IDs
- Loop through the Jamf Pro IDs and identify the IDs with the most recent enrollment dates.
- Verify that the individual Jamf Pro IDs are associated with Macs, as opposed to virtual machines running macOS.
- Loop through the list of identified Macs with Jamf Pro IDs and delete all Macs except for the one with the most recent enrollment date.
- Create a report in tab-separated value (.tsv) format which contains the following information about the deleted Macs.
- Jamf Pro ID
- Manufacturer
- Model
- Serial Number
- Hardware UDID
For authentication, the script can accept hard-coded values in the script, manual input or values stored in a ~/Library/Preferences/com.github.jamfpro-info.plist file.
The plist file can be created by running the following commands and substituting your own values where appropriate:
To store the Jamf Pro URL in the plist file:
defaults write com.github.jamfpro-info jamfpro_url https://jamf.pro.server.goes.here:port_number_goes_here
To store the account username in the plist file:
defaults write com.github.jamfpro-info jamfpro_user account_username_goes_here
To store the account password in the plist file:
defaults write com.github.jamfpro-info jamfpro_password account_password_goes_here
When the script is run, you should see output which looks similar to this.
The report generated in tab-separated value (.tsv) format should be openable natively by both Microsoft Excel and Apple Numbers.
The script is available below and at the following address on GitHub: