Posted on 03-19-2024 08:14 AM
Hi,
Jamf is supporting default scripts for checking time machine backups. But with new versions of mac os this won´t work beuacse diskutil is using PlistBuddy. This has no disc access. If i enable Terminal in full disk access those scripts are working again.
Without disc access
With disc access
How can i set Terminal do full disc access via configuration profile?
Greets Frank
03-19-2024 08:37 AM - edited 03-19-2024 08:38 AM
you don't want to grant terminal full disk access.. thats 'a bad idea'
not sure why plistbuddy is requiring access, but this does not.. you'll need to work that a bit to get the result you need, but you get the idea.
defaults read /Library/Preferences/com.apple.TimeMachine.plist | grep LastDestinationID
Posted on 03-20-2024 12:27 AM
This is the script that Jamf offers in Custom attributes. This does not work anymore with newer MacOS Version.
#!/bin/sh
enabled=`/usr/bin/defaults read /Library/Preferences/com.apple.TimeMachine AutoBackup`
if [ "$enabled" == "1" ]; then
# Determine the OS version since the destination key name differs on OS
OS=`/usr/bin/sw_vers -productVersion | /usr/bin/colrm 5`
if [[ "$OS" < "10.7" ]]; then
backupDestination=`/usr/sbin/diskutil info $(/usr/bin/defaults read /Library/Preferences/com.apple.TimeMachine "DestinationVolumeUUID") | grep "Mount Point" | /usr/bin/cut -c 30-`
validateDestination=`/usr/sbin/diskutil info $(/usr/bin/defaults read /Library/Preferences/com.apple.TimeMachine "DestinationVolumeUUID") | awk '{print $1, $2}'`
elif [ "$OS" == "10.7" ]; then
backupDestination=`/usr/sbin/diskutil info $(/usr/libexec/PlistBuddy -c "Print DestinationVolumeUUIDs:0" /Library/Preferences/com.apple.TimeMachine.plist) | grep "Mount Point" | /usr/bin/cut -c 30-`
validateDestination=`/usr/sbin/diskutil info $(/usr/libexec/PlistBuddy -c "Print DestinationVolumeUUIDs:0" /Library/Preferences/com.apple.TimeMachine.plist) | awk '{print $1, $2}'`
elif [[ "$OS" > "10.7" ]]; then
backupDestination=`/usr/sbin/diskutil info $(/usr/libexec/PlistBuddy -c "Print Destinations:0:DestinationUUIDs:0" /Library/Preferences/com.apple.TimeMachine.plist) | grep "Mount Point" | /usr/bin/cut -c 30-`
validateDestination=`/usr/sbin/diskutil info $(/usr/libexec/PlistBuddy -c "Print Destinations:0:DestinationUUIDs:0" /Library/Preferences/com.apple.TimeMachine.plist) | awk '{print $1, $2}'`
fi
if [ "$validateDestination" == "Could not" ];then
echo "<result>Destination not mounted</result>"
else
echo "<result>$backupDestination</result>"
fi
else
echo "<result>Not enabled.</result>"
fi
I will try your snipped. Thanks
Posted on 03-20-2024 02:41 AM
OK, i changed the scripts and i want to share them if somebody else wants to check time machine status
Last succesfull backup
#!/bin/bash
# Plist-Datei, die das Time Machine Setup enthält
TM_PLIST="/Library/Preferences/com.apple.TimeMachine.plist"
# Überprüfe, ob die Plist-Datei existiert
if [ ! -f "$TM_PLIST" ]; then
echo "Die Datei $TM_PLIST existiert nicht."
exit 1
fi
# Verwende defaults read und perl, um das Datum des letzten Backups zu finden
last_backup_date=$(defaults read "$TM_PLIST" Destinations | \
perl -0777 -ne 'print "$1\n" if /SnapshotDates\s+=\s+\(\s+(.*?)\s+\)/s')
# Extrahiere das letzte Datum (das letzte Backup)
last_successful_backup_date=$(echo "$last_backup_date" | tail -n 1 | tr -d '[:space:]' | sed 's/"//g')
# Überprüfe, ob ein Datum vorhanden ist
if [ -n "$last_successful_backup_date" ]; then
# Schneide die letzten 5 Stellen ab
last_successful_backup_date=$(echo "$last_successful_backup_date" | cut -c 1-$((${#last_successful_backup_date}-5)))
# Ausgabe des letzten erfolgreichen Backup-Datums
echo "<result>$last_successful_backup_date</result>"
else
echo "<result>1907.01.01 01.00.00</result>"
fi
Get backup destination
#!/bin/bash
# Plist-Datei, die das Time Machine Setup enthält
TM_PLIST="/Library/Preferences/com.apple.TimeMachine.plist"
# Überprüfe, ob die Plist-Datei existiert
if [ ! -f "$TM_PLIST" ]; then
echo "Die Datei $TM_PLIST existiert nicht."
exit 1
fi
# Verwende PlistBuddy, um das letzte Time Machine Backup-Ziel zu erhalten
last_backup_target=$(/usr/libexec/PlistBuddy -c "Print Destinations:0:LastKnownVolumeName" "$TM_PLIST")
# Ausgabe des letzten Backup-Ziels
if [ -z "${VAR}" ]; then
echo "<result>$last_backup_target</result>"
else
echo "<result>Unknown</result>"
fi
Posted on 03-20-2024 02:48 AM
Sorry there was an error in return last backup date.
#!/bin/bash
# Plist-Datei, die das Time Machine Setup enthält
TM_PLIST="/Library/Preferences/com.apple.TimeMachine.plist"
# Überprüfe, ob die Plist-Datei existiert
if [ ! -f "$TM_PLIST" ]; then
echo "Die Datei $TM_PLIST existiert nicht."
exit 1
fi
# Verwende defaults read und perl, um das Datum des letzten Backups zu finden
last_backup_date=$(defaults read "$TM_PLIST" Destinations | \
perl -0777 -ne 'print "$1\n" if /SnapshotDates\s+=\s+\(\s+(.*?)\s+\)/s')
# Extrahiere das letzte Datum (das letzte Backup)
last_successful_backup_date=$(echo "$last_backup_date" | tail -n 1 | tr -d '[:space:]' | sed 's/"//g')
# Überprüfe, ob ein Datum vorhanden ist
if [ -n "$last_successful_backup_date" ]; then
# Extrahiere das Jahr, den Monat, den Tag, die Stunde, die Minute und die Sekunde
year=$(echo "$last_successful_backup_date" | cut -c 1-4)
month=$(echo "$last_successful_backup_date" | cut -c 6-7)
day=$(echo "$last_successful_backup_date" | cut -c 9-10)
hour=$(echo "$last_successful_backup_date" | cut -c 11-12)
minute=$(echo "$last_successful_backup_date" | cut -c 14-15)
second=$(echo "$last_successful_backup_date" | cut -c 17-18)
# Formatieren des Datums im "YYYY.MM.DD hh:mm:ss" Format
formatted_date="${year}.${month}.${day} ${hour}:${minute}:${second}"
# Ausgabe des letzten erfolgreichen Backup-Datums
echo "<result>$formatted_date</result>"
else
echo "<result>1907.01.01 01.00.00</result>"
fi