162 lines
5.8 KiB
Bash
162 lines
5.8 KiB
Bash
#!/bin/bash
|
|
|
|
#####################################################################################
|
|
# Shellscript : User kann entscheiden, wann das Gerät neugestartet wird.
|
|
# Autor : Andreas Vogel, macenterprise gmbh, 17.12.2019
|
|
#####################################################################################
|
|
|
|
#################################### 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 "300, 900, 1800, 14400, 21600" -button1 "Immediately" -cancelButton 1 -defaultButton 2 -timeout "5" -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)
|
|
|
|
# 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 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 neugestartet.
|
|
|
|
The system will restart at $hour:$minute based on your selection
|
|
|
|
"
|
|
#################################### Create deamen ####################################
|
|
|
|
delayRestart()
|
|
{
|
|
/bin/cat <<EOF > /Library/LaunchDaemons/de.ing.delayRestart.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.delayRestart</string>
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>reboot</string>
|
|
</array>
|
|
<key>StartCalendarInterval</key>
|
|
<dict>
|
|
<key>Hour</key>
|
|
<integer>$hour</integer>
|
|
<key>Minute</key>
|
|
<integer>$minute</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>sh</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
|
|
}
|
|
|
|
|
|
LastWarningScript()
|
|
{
|
|
/bin/cat <<EOF > /Library/Application Support/JAMF/ING/LastWarningScript.sh
|
|
#!/bin/bash
|
|
|
|
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$InfoIcon" -title "Warning" -description "$RestartMessage" -button1 "OK" -defaultButton 1 -timeout 60
|
|
EOF
|
|
}
|
|
|
|
#################################### Create and Load Daemon and Script ####################################
|
|
StartandLoad()
|
|
{
|
|
# set ownership on delayRestart launch daemon
|
|
chown root:wheel /Library/LaunchDaemons/de.ing.delayRestart.plist
|
|
chmod 644 /Library/LaunchDaemons/de.ing.delayRestart.plist
|
|
|
|
# set ownership on LastWarningDaemon launch daemon
|
|
chown root:wheel /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
chmod 644 /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
|
|
#load launchd
|
|
launchctl load /Library/LaunchDaemons/de.ing.delayRestart.plist
|
|
launchctl load /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
|
|
|
|
}
|
|
|
|
#################################### Ausführung ####################################
|
|
|
|
if [[ "$buttonClicked" == "2" ]] && [[ ! -z "$delayint" ]]
|
|
then
|
|
|
|
InfoRestart
|
|
|
|
elif [ "$buttonClicked" == "1" ]
|
|
then
|
|
|
|
echo "sofort neustarten"
|
|
|
|
fi |