@fernandez.payen : The whole issue will soon be academic, as Apple has announced plans to start using random serial numbers.
I don't know why I didn't think of this earlier, but what we really need is a script to check the model identifier. (For example, MacBookPro5,5)
I'll look into creating such a script.
Anything come out of this? My org is finally wanting to track our inventory and keep things more current.
I have been trying to get this to work all morning and have failed. I have the script setup as an EA. I create a new search with the EA checked, along with some other identifiers...results are always zero. I am not sure where I am messing up.
For me the dates returned stop in 2019. Any script like this for the new serial numbers? We don't have GSX to pull from.
Took @Rocky 's script and revamped it based on @stevenjklein 's idea now that serials aren't the source of truth (with Gemini's assist and using this list: https://support.apple.com/en-us/108052):
#!/bin/bash
# Function to get the Mac model identifier
get_model_identifier() {
local model_identifier
# Use system_profiler as an alternative to ioreg
model_identifier=$(system_profiler SPHardwareDataType | grep "Model Identifier" | awk '{print $3}')
if [ -z "$model_identifier" ]; then
echo "Error: Could not retrieve Mac model identifier."
return 1
fi
echo "$model_identifier"
}
# Function to roughly determine the manufacturing year and month based on model identifier.
# This is a simplified approach and may not be accurate for all models.
# A more robust solution would involve a lookup table or online database.
get_approximate_manufacture_date() {
local model_identifier="$1"
local year=0
local month="Unknown"
# Basic pattern matching.
# This is NOT exhaustive and is meant to be a starting point.
# It's very difficult to get exact dates from the model identifier, so this is approximate.
case "$model_identifier" in
"MacBook1,1") year=2006; month="May";;
"MacBook2,1") year=2007; month="Nov";;
"MacBook3,1") year=2008; month="Feb";;
"MacBook4,1") year=2008; month="Oct";;
"MacBook5,1") year=2009; month="May";;
"MacBook5,2") year=2009; month="Jun";;
"MacBook6,1") year=2009; month="Oct";;
"MacBook7,1") year=2010; month="May";;
"MacBook8,1") year=2015; month="Apr";;
"MacBook9,1") year=2016; month="Apr";;
"MacBook10,1") year=2017; month="Jun";;
"MacBook11,1") year=2017; month="Jun";;
"MacBook12,1") year=2017; month="Jun";;
"MacBook13,1") year=2017; month="Jun";;
"MacBook14,1") year=2021; month="Oct";;
"MacBook15,1") year=2021; month="Oct";;
"MacBookAir1,1") year=2008; month="Jan";;
"MacBookAir2,1") year=2009; month="Jun";;
"MacBookAir3,1") year=2010; month="Oct";;
"MacBookAir3,2") year=2010; month="Oct";;
"MacBookAir4,1") year=2011; month="Jul";;
"MacBookAir4,2") year=2011; month="Jul";;
"MacBookAir5,1") year=2012; month="Jun";;
"MacBookAir5,2") year=2012; month="Jun";;
"MacBookAir6,1") year=2013; month="Jun";;
"MacBookAir6,2") year=2013; month="Jun";;
"MacBookAir7,1") year=2015; month="Mar";;
"MacBookAir7,2") year=2015; month="Mar";;
"MacBookAir8,1") year=2018; month="Nov";;
"MacBookAir8,2") year=2019; month="Jul";;
"MacBookAir9,1") year=2020; month="Mar";;
"MacBookAir10,1") year=2020; month="Nov";;
"MacBookAir10,2") year=2020; month="Nov";;
"MacBookAir11,1") year=2020; month="Nov";;
"MacBookAir11,2") year=2020; month="Nov";;
"MacBookAir12,1") year=2022; month="Jul";;
"MacBookAir13,1") year=2024; month="Mar";;
"MacBookAir13,2") year=2024; month="Mar";;
"MacBookAir14,1") year=2025; month="Jun";;
"MacBookAir14,2") year=2025; month="Jun";;
"MacBookPro1,1") year=2006; month="Feb";;
"MacBookPro1,2") year=2006; month="Oct";;
"MacBookPro2,1") year=2006; month="Oct";;
"MacBookPro2,2") year=2007; month="Jun";;
"MacBookPro3,1") year=2007; month="Oct";;
"MacBookPro4,1") year=2008; month="Feb";;
"MacBookPro5,1") year=2009; month="Jan";;
"MacBookPro5,2") year=2009; month="Jun";;
"MacBookPro5,3") year=2009; month="Mar";;
"MacBookPro5,4") year=2009; month="Jun";;
"MacBookPro5,5") year=2009; month="Jun";;
"MacBookPro6,1") year=2010; month="Apr";;
"MacBookPro6,2") year=2010; month="Apr";;
"MacBookPro7,1") year=2010; month="Apr";;
"MacBookPro8,1") year=2011; month="Feb";;
"MacBookPro8,2") year=2011; month="Feb";;
"MacBookPro8,3") year=2011; month="Feb";;
"MacBookPro9,1") year=2012; month="Jun";;
"MacBookPro9,2") year=2012; month="Jun";;
"MacBookPro10,1") year=2012; month="Jun";;
"MacBookPro10,2") year=2012; month="Jun";;
"MacBookPro11,1") year=2013; month="Oct";;
"MacBookPro11,2") year=2013; month="Oct";;
"MacBookPro11,3") year=2013; month="Oct";;
"MacBookPro11,4") year=2014; month="Jul";;
"MacBookPro11,5") year=2014; month="Jul";;
"MacBookPro12,1") year=2015; month="Mar";;
"MacBookPro13,1") year=2016; month="Oct";;
"MacBookPro13,2") year=2016; month="Oct";;
"MacBookPro13,3") year=2016; month="Oct";;
"MacBookPro14,1") year=2017; month="Jun";;
"MacBookPro14,2") year=2017; month="Jun";;
"MacBookPro14,3") year=2017; month="Jun";;
"MacBookPro15,1") year=2018; month="Jul";;
"MacBookPro15,2") year=2018; month="Jul";;
"MacBookPro15,3") year=2019; month="May";;
"MacBookPro15,4") year=2019; month="May";;
"MacBookPro16,1") year=2019; month="Nov";;
"MacBookPro16,2") year=2019; month="Nov";;
"MacBookPro16,3") year=2020; month="May";;
"MacBookPro16,4") year=2020; month="May";;
"MacBookPro17,1") year=2021; month="Oct";;
"MacBookPro18,1") year=2021; month="Oct";;
"MacBookPro18,2") year=2021; month="Oct";;
"MacBookPro19,1") year=2023; month="Jan";;
"MacBookPro19,2") year=2023; month="Jan";;
"MacBookPro20,1") year=2024; month="Jan";;
"MacBookPro20,2") year=2024; month="Jan";;
"MacBookPro21,1") year=2025; month="Jun";;
"MacBookPro21,2") year=2025; month="Jun";;
"Macmini1,1") year=2005; month="Jan";;
"Macmini2,1") year=2007; month="Aug";;
"Macmini3,1") year=2009; month="Mar";;
"Macmini4,1") year=2010; month="Jun";;
"Macmini5,1") year=2011; month="Jul";;
"Macmini5,2") year=2011; month="Jul";;
"Macmini5,3") year=2012; month="Jun";;
"Macmini6,1") year=2012; month="Oct";;
"Macmini6,2") year=2012; month="Oct";;
"Macmini7,1") year=2014; month="Oct";;
"Macmini8,1") year=2018; month="Nov";;
"Macmini9,1") year=2020; month="Mar";;
"Macmini9,2") year=2020; month="Mar";;
"Macmini10,1") year=2024; month="Jan";;
"Macmini11,1") year=2025; month="Jun";;
"iMac4,1") year=2006; month="Jan";;
"iMac4,2") year=2006; month="Sep";;
"iMac5,1") year=2006; month="May";;
"iMac5,2") year=2006; month="Sep";;
"iMac6,1") year=2007; month="Aug";;
"iMac7,1") year=2007; month="Aug";;
"iMac8,1") year=2008; month="Mar";;
"iMac9,1") year=2009; month="Mar";;
"iMac10,1") year=2009; month="Oct";;
"iMac11,1") year=2010; month="Jul";;
"iMac11,2") year=2010; month="Jul";;
"iMac11,3") year=2011; month="May";;
"iMac12,1") year=2011; month="May";;
"iMac12,2") year=2011; month="May";;
"iMac13,1") year=2012; month="Nov";;
"iMac13,2") year=2012; month="Nov";;
"iMac13,3") year=2013; month="Sep";;
"iMac14,1") year=2013; month="Sep";;
"iMac14,2") year=2013; month="Sep";;
"iMac14,3") year=2014; month="Jun";;
"iMac14,4") year=2014; month="Jun";;
"iMac15,1") year=2014; month="Oct";;
"iMac16,1") year=2015; month="Oct";;
"iMac16,2") year=2015; month="Oct";;
"iMac17,1") year=2015; month="Oct";;
"iMac18,1") year=2017; month="Jun";;
"iMac18,2") year=2017; month="Jun";;
"iMac18,3") year=2017; month="Jun";;
"iMac19,1") year=2019; month="Mar";;
"iMac19,2") year=2019; month="Mar";;
"iMac20,1") year=2020; month="Aug";;
"iMac20,2") year=2020; month="Aug";;
"iMac21,1") year=2021; month="Apr";;
"iMac21,2") year=2021; month="Apr";;
"iMac24,1") year=2021; month="Apr";;
"iMac25,1") year=2023; month="Jan";;
"iMac25,2") year=2024; month="Jan";;
"iMac26,1") year=2024; month="Jan";;
"iMac26,2") year=2025; month="Jun";;
"MacPro1,1") year=2006; month="Aug";;
"MacPro2,1") year=2007; month="Aug";;
"MacPro3,1") year=2008; month="Jan";;
"MacPro4,1") year=2009; month="Mar";;
"MacPro5,1") year=2010; month="Jul";;
"MacPro6,1") year=2013; month="Dec";;
"MacPro7,1") year=2019; month="Dec";;
"MacPro8,1") year=2023; month="Jun";;
"MacPro9,1") year=2025; month="Mar";;
"Xserve1,1") year=2006; month="May";;
"Xserve1,2") year=2006; month="Nov";;
"Xserve2,1") year=2008; month="Jan";;
"Xserve3,1") year=2009; month="Jan";;
"Mac14,3") year=2023; month="Jan";;
"Mac14,5") year=2023; month="Jan";;
"Mac14,6") year=2023; month="Jan";;
"Mac14,7") year=2023; month="Jan";;
"Mac14,9") year=2023; month="Jan";;
"Mac14,10") year=2023; month="Jan";;
"Mac15,3") year=2023; month="Nov";;
"Mac15,6") year=2023; month="Nov";;
"Mac15,7") year=2023; month="Nov";;
"Mac15,8") year=2023; month="Nov";;
"Mac15,9") year=2023; month="Nov";;
"Mac15,10") year=2023; month="Nov";;
"Mac15,11") year=2023; month="Nov";;
"Mac16,1") year=2024; month="Jan";;
"Mac16,5") year=2024; month="Jan";;
"Mac16,6") year=2024; month="Jan";;
"Mac16,7") year=2024; month="Jan";;
"Mac16,8") year=2024; month="Jan";;
year=0; month="Unknown";; # Default to 0 if not found
esac
echo "$year $month"
}
# Function to calculate age based on the manufacturing year.
calculate_age() {
local manufacture_year="$1"
local manufacture_month="$2"
local current_year=$(date +%Y)
local current_month=$(date +%m) # Get current month as a number (01-12)
# Convert month names to numbers for comparison
local manufacture_month_num
case "$manufacture_month" in
"Jan") manufacture_month_num=1 ;;
"Feb") manufacture_month_num=2 ;;
"Mar") manufacture_month_num=3 ;;
"Apr") manufacture_month_num=4 ;;
"May") manufacture_month_num=5 ;;
"Jun") manufacture_month_num=6 ;;
"Jul") manufacture_month_num=7 ;;
"Aug") manufacture_month_num=8 ;;
"Sep") manufacture_month_num=9 ;;
"Oct") manufacture_month_num=10 ;;
"Nov") manufacture_month_num=11 ;;
"Dec") manufacture_month_num=12 ;;
"Unknown") manufacture_month_num=0 ;;
manufacture_month_num=0 ;;
esac
if [ "$manufacture_year" -eq 0 ]; then
echo "Unknown"
else
# Calculate age in years and months
local years=$((current_year - manufacture_year))
local months=$((current_month - manufacture_month_num))
if [ "$months" -lt 0 ]; then
((years--))
months=$((months + 12))
fi
echo "$years years $months months"
fi
}
# Main script logic
model_identifier=$(get_model_identifier)
if [ $? -ne 0 ]; then
echo "Failed to get model identifier. Exiting."
exit 1
fi
manufacture_date=$(get_approximate_manufacture_date "$model_identifier")
if [ $? -ne 0 ]; then
echo "Failed to get manufacture date. Exiting."
exit 1
fi
IFS=' ' read -r manufacture_year manufacture_month <<< "$manufacture_date"
if [ "$manufacture_year" -eq 0 ]; then
echo "Model Identifier: $model_identifier"
echo "Warning: Could not determine approximate manufacturing year for this model."
echo "Age: Unknown"
else
age=$(calculate_age "$manufacture_year" "$manufacture_month")
echo "Model Identifier: $model_identifier"
echo "Approximate Manufacturing Date: $manufacture_month $manufacture_year"
echo "Approximate Age: $age"
fi
echo "<result>$age</result>"