Files
Alte_Skripte/aktuelle_Scripte/de.ing.Test_delay_Script_with_daemon 2.sh
Andreas Vogel 306149a726 test
2026-02-16 15:28:29 +01:00

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