263 lines
9.5 KiB
Bash
263 lines
9.5 KiB
Bash
#!/bin/bash
|
|
|
|
#####################################################################################
|
|
# Shellscript : User kann entscheiden, wann das Gerät neugestartet wird.
|
|
# Quelle : https://
|
|
# Autor : Andreas Vogel, macenterprise gmbh, 17.12.2019
|
|
#####################################################################################
|
|
|
|
#################################### Remove und Delete old Daemon ####################################
|
|
|
|
launchctl remove de.ing.LastWarningDaemon.plist
|
|
/bin/rm -f /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
|
|
#################################### Jamf Helper ####################################
|
|
jamfHelper="/Library/Application Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper"
|
|
jamf="/usr/local/bin/jamf"
|
|
user=$(stat -f '%u %Su' /dev/console | cut -d ' ' -f 2)
|
|
INGIcon="/Users/$user/Library/Application Support/com.jamfsoftware.selfservice.mac/Documents/Images/brandingimage.png"
|
|
Message="
|
|
Auf diesem Gerät wurde ein Sicherheitsupdate installiert.
|
|
Dieses erfordert einen Neurtart des Gerätes. Bitte starte den Rechner jetzt neu oder wähle eine der Optionen aus um den Neustart zu verschieben.
|
|
|
|
A security update has been installed on this device.
|
|
This requires a reboot of the device. Please restart the computer now or select one of the options to reschedule the restart.
|
|
"
|
|
RestartOptions=$("$jamfHelper" -windowType utility -icon "$INGIcon" -title "Please restart" -description "$Message" -button2 "Restart in" -showDelayOptions "120, 300, 900, 1800, 14400, 21600" -button1 "Immediately" -cancelButton 1 -defaultButton 2 -timeout "300" -countdown -alignCountdown "right")
|
|
|
|
#################################### Variablen ####################################
|
|
# Variablen zur weiterverarbeitung
|
|
# Diese Variablen werden benötigt, damit ausgewertet werden kann, welche Taste gedrückt worden ist.
|
|
# Des Weiteren wird die gewählte Zeit ausgewertet und nach welche Zeit die letzte Warnung in Sekunden
|
|
# erfolgen wird.
|
|
buttonClicked="${RestartOptions:$i-1}"
|
|
result=$RestartOptions
|
|
delayint=$(echo "$result" | /usr/bin/sed 's/.$//')
|
|
warndelayint=$(expr $delayint - 60)
|
|
warndelayfivemin=$(expr $delayint - 300)
|
|
|
|
# Variablen delayRestart
|
|
# Diese Variablen werden für den delayRestart Daemon benutzt.
|
|
# Die Variablen sind entsprechen nicht den Variablen für die letzte Meldung.
|
|
|
|
defercal=$(($(/bin/date +%s) + delayint))
|
|
hour=$(/bin/date -j -f "%s" "$defercal" "+%H")
|
|
minute=$(/bin/date -j -f "%s" "$defercal" "+%M")
|
|
|
|
|
|
# Variablen für LastWarning Daemon
|
|
# Dieses Variablen werden für den Daemon benutz, der eine Minute vor dem geplanten Neustart
|
|
# gestartet wird und die Meldung bringt.
|
|
|
|
warndefercal=$(($(/bin/date +%s) + warndelayint))
|
|
warnhour=$(/bin/date -j -f "%s" "$warndefercal" "+%H")
|
|
warnminute=$(/bin/date -j -f "%s" "$warndefercal" "+%M")
|
|
|
|
|
|
# Variablen für 5minWarning Daemon
|
|
# Dieses Variablen werden für den Daemon benutz, der 5 Minute vor dem geplanten Neustart
|
|
# gestartet wird und die Meldung bringt.
|
|
|
|
warner=$(($(/bin/date +%s) + warndelayfivemin))
|
|
behour=$(/bin/date -j -f "%s" "$warner" "+%H")
|
|
beminute=$(/bin/date -j -f "%s" "$warner" "+%M")
|
|
|
|
|
|
#################################### Variablen Massage / Icons ####################################
|
|
InfoIcon="/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ToolbarInfo.icns"
|
|
RestartIcon="/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/Sync.icns"
|
|
|
|
|
|
RestartMessage="Das System wird in 1 Minute neugestartet. Es erfolgt kein weiterer Hinweis.
|
|
|
|
The system will restart in 1 minute. There is no further notice."
|
|
|
|
InfoMessage="Das System wird aufgrund deiner Auswahl um $hour:$minute Uhr neu gestartet.
|
|
|
|
The system will restart at $hour:$minute o'clock based on your selection
|
|
|
|
"
|
|
|
|
ShutdownMessage="Das System wird jetzt aufgrund deiner Auswahl neu gestartet.
|
|
Das System wird für den Neustart vorbereitet.
|
|
|
|
The system will restart now based on your selection.
|
|
The system is being prepared for a restart.
|
|
|
|
"
|
|
|
|
FiveMinShutdownMessage="Das System wird aufgrund deiner Auswahl in 5 Minuten neu gestartet.
|
|
|
|
The system will restart in 5 minutes based on your selection.
|
|
|
|
"
|
|
#################################### Create deamen ####################################
|
|
|
|
FiveMinWarningDaemon()
|
|
{
|
|
/bin/cat <<EOF > /Library/LaunchDaemons/de.ing.FiveMinWarningDaemon.plist
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>Label</key>
|
|
<string>de.ing.FiveMinWarningScript</string>
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>/bin/bash</string>
|
|
<string>/Library/Application Support/JAMF/ING/FiveMinWarningScript.sh</string>
|
|
</array>
|
|
<key>StartCalendarInterval</key>
|
|
<dict>
|
|
<key>Hour</key>
|
|
<integer>$behour</integer>
|
|
<key>Minute</key>
|
|
<integer>$beminute</integer>
|
|
</dict>
|
|
</dict>
|
|
</plist>
|
|
EOF
|
|
}
|
|
|
|
|
|
LastWarningDaemon()
|
|
{
|
|
/bin/cat <<EOF > /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>Label</key>
|
|
<string>de.ing.LastWarningDaemon</string>
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>/bin/bash</string>
|
|
<string>/Library/Application Support/JAMF/ING/LastWarningScript.sh</string>
|
|
</array>
|
|
<key>StartCalendarInterval</key>
|
|
<dict>
|
|
<key>Hour</key>
|
|
<integer>$warnhour</integer>
|
|
<key>Minute</key>
|
|
<integer>$warnminute</integer>
|
|
</dict>
|
|
</dict>
|
|
</plist>
|
|
EOF
|
|
}
|
|
|
|
#################################### Create Script ####################################
|
|
|
|
InfoRestart()
|
|
{
|
|
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$RestartIcon" -title "Info" -description "$InfoMessage" -button1 "OK" -defaultButton 1 -timeout 60
|
|
}
|
|
|
|
FiveMinWarningScript()
|
|
{
|
|
/bin/cat <<EOF > /Library/Application\ Support/JAMF/ING/de.ing.FiveMinWarningScript.sh
|
|
#!/bin/bash
|
|
|
|
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$InfoIcon" -title "Restart in five minutes" -description "$FiveMinShutdownMessage" -button1 "OK" -defaultButton 1 -timeout 60
|
|
|
|
launchctl remove de.ing.FiveMinWarningScript.plist
|
|
/bin/rm -f /Library/LaunchDaemons/de.ing.FiveMinWarningScript.plist
|
|
|
|
EOF
|
|
}
|
|
|
|
# Sicherstellung, dass der Neustart eine Minute nach der Meldung erfolgt.
|
|
# Bassierend auf der Auswahlt, die der User getroffen hat.
|
|
# Neustart wird nicht verzögert. Unaghängig ob der User in der letzten Meldung auf OK klickt oder nicht wird der Neustart
|
|
# zu der geplanten Zeit ausgeführt.
|
|
# Gemäß der der "man shutdown" kann die Option wie folgt gelegt werden:
|
|
# -r The system is rebooted at the specified time.
|
|
# The hours and minutes in the second time format may be separated by a colon (``:'') for backward compatibility.
|
|
|
|
# Anschliessend wird das Script den Daemon wieder löschen. Das Script bleibt erhalten.
|
|
# Beim nächsten ausführen der Policy wird das Script überschrieben und die neuen Variablen übernehmen.
|
|
|
|
LastWarningScript()
|
|
{
|
|
/bin/cat <<EOF > /Library/Application\ Support/JAMF/ING/de.ing.LastWarningScript.sh
|
|
#!/bin/bash
|
|
|
|
shutdown -r $hour:$minute
|
|
|
|
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$InfoIcon" -title "Warning" -description "$RestartMessage" -button1 "OK" -defaultButton 1 -timeout 45
|
|
|
|
launchctl remove de.ing.LastWarningDaemon.plist
|
|
/bin/rm -f /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
|
|
EOF
|
|
}
|
|
|
|
shutdownWarning()
|
|
{
|
|
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$InfoIcon" -title "Warning" -description "$ShutdownMessage" -button1 "OK" -defaultButton 1 -timeout 45
|
|
|
|
# shutdown -r +1
|
|
}
|
|
|
|
#################################### Load Daemon and Script ####################################
|
|
StartandLoadFiveMin()
|
|
{
|
|
# set ownership on LastWarningDaemon launch daemon
|
|
/usr/sbin/chown root:wheel /Library/LaunchDaemons/de.ing.FiveMinWarningDaemon.plist
|
|
/bin/chmod 644 /Library/LaunchDaemons/de.ing.FiveMinWarningDaemon.plist
|
|
|
|
#load launchd
|
|
launchctl load /Library/LaunchDaemons/de.ing.FiveMinWarningDaemon.plist
|
|
|
|
#set ownership for Script
|
|
/usr/sbin/chown root:admin "/Library/Application Support/JAMF/ING/de.ing.FiveMinWarningScript.sh"
|
|
/bin/chmod 755 "/Library/Application Support/JAMF/ING/de.ing.FiveMinWarningScript.sh"
|
|
|
|
}
|
|
StartandLoadMaster()
|
|
{
|
|
# set ownership on LastWarningDaemon launch daemon
|
|
/usr/sbin/chown root:wheel /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
/bin/chmod 644 /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
|
|
#load launchd
|
|
launchctl load /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
|
|
#set ownership for Script
|
|
/usr/sbin/chown root:admin "/Library/Application Support/JAMF/ING/LastWarningScript.sh"
|
|
/bin/chmod 755 "/Library/Application Support/JAMF/ING/LastWarningScript.sh"
|
|
|
|
}
|
|
|
|
#################################### Ausführung ####################################
|
|
|
|
if [[ "$buttonClicked" == "2" ]] && [[ ! -z "$delayint" ]] && [[ $delayint -gt 900 ]]
|
|
then
|
|
echo "option 1 länger als 15 min. 5 min vor dem Start eine Meldung und eine min "
|
|
FiveMinWarningScript
|
|
LastWarningDaemon
|
|
InfoRestart
|
|
FiveMinWarningDaemon
|
|
LastWarningScript
|
|
StartandLoadFiveMin
|
|
StartandLoadMaster
|
|
|
|
else
|
|
if [[ "$buttonClicked" == "2" ]] && [[ ! -z "$delayint" ]]
|
|
then
|
|
|
|
echo "option 2 unter 15 Min. Warnung nur 1 min vor dem Neustart"
|
|
LastWarningDaemon
|
|
InfoRestart
|
|
LastWarningScript
|
|
StartandLoadMaster
|
|
|
|
elif [ "$buttonClicked" == "1" ]
|
|
then
|
|
|
|
shutdownWarning
|
|
|
|
fi
|
|
fi |