#!/bin/bash ########################################################################## # Shellscript : Notification. # Autor : Andreas Vogel, macenterprise gmbh, 2019 ########################################################################## ###################################################################################################################################################### #Variablen # # # BundleID="${1}" -> Wird aus dem System übergeben. # DeferralType="${2}" -> Wird aus dem System übergeben. # DeferralValue="${3}" -> Wird aus dem System übergeben. # AppName="${4}" -> Gibt an, welche Application betroffen ist. -> Pflicht # AppQuitRequired="${5}" -> Gibt an, ob die App vor dem Update geschlossen werden muss -> Pflicht # ProcessName="${6}" -> Hier muss der exakte Name des Prozesses angegeben werden -> Pflicht # RebootRequired="${7}" -> Gibt an, ob ein Neustart erforderlich ist ja / nein -> Pflicht # RunPolicy="${8}" -> Gibt an, welche Policy ausgeführt werden soll. Diese wird über die Policy-ID ausgeführt -> Pflicht # Frei Variable="${9}" -> Diese Variable ist frei # DeferralPlist="${10}" -> Gibt an, wie oft das Update verschoben werden kann -> Optional # TimeOutinSec="${11}" -> Gibt an, wie lange die Nachricht angezeigt wird -> Optional ###################################################################################################################################################### # Die Notification kann im beliebigen Intervall ausgeführt werden. # Die Möglichkeit, wie oft die Meldung verschoben werden kann, bis das Update erzwungen wird, kann dynamisch angepasst werden. # Ist keine Anpassung erfolgt, so wird die Möglichkeit auf 3 beschränkt. # Nach maximal möglichen Verschiebungen, wird das Update erzwungen und. Der User wird drauf hingewiesen. # Die Dauer der Meldung, kann in Sekunden bestimmt werden. ist nicht bestimmt worden, so wird der Standard auf 900 sec. gesetzt. # Der Text ist immer gleich. Über die Variable muss der Name der App angegeben werden. # Es muss festgelegt werden, ob ein Neustart erforderlich ist oder nicht. # set -x setDeferral (){ BundleID="${1}" DeferralType="${2}" DeferralValue="${3}" DeferralPlist="${4}" if [[ "$DeferralType" == "date" ]]; then DeferralDate="$(/usr/libexec/PlistBuddy -c "print :$BundleID:date" "$DeferralPlist" 2>/dev/null)" # Set deferral date if [[ -n "$DeferralDate" ]] && [[ ! "$DeferralDate" =~ "File Doesn't Exist" ]]; then # /usr/libexec/PlistBuddy -c "set :$BundleID:date '07/04/2019 11:21:51 +0000'" "$DeferralPlist" /usr/libexec/PlistBuddy -c "set :$BundleID:date $DeferralValue" "$DeferralPlist" 2>/dev/null else # /usr/libexec/PlistBuddy -c "add :$BundleID:date date '07/04/2019 11:21:51 +0000'" "$DeferralPlist" /usr/libexec/PlistBuddy -c "add :$BundleID:date date $DeferralValue" "$DeferralPlist" 2>/dev/null fi elif [[ "$DeferralType" == "count" ]]; then DeferralCount="$(/usr/libexec/PlistBuddy -c "print :$BundleID:count" "$DeferralPlist" 2>/dev/null)" # Set deferral count if [[ -n "$DeferralCount" ]] && [[ ! "$DeferralCount" =~ "File Doesn't Exist" ]]; then /usr/libexec/PlistBuddy -c "set :$BundleID:count $DeferralValue" "$DeferralPlist" 2>/dev/null else /usr/libexec/PlistBuddy -c "add :$BundleID:count integer $DeferralValue" "$DeferralPlist" 2>/dev/null fi else echo "Falscher Stundungstyp verwendet" exit 14 fi } ###################################################################################################################################################### AppName="${4}" DeferralPlist="/Library/Application Support/JAMF/ING/com.custom.$AppName.plist" BundleID="de.ing.$AppName" DeferralType="count" ###################################################################################################################################################### # Setzen der Tage bzw. die Anzahl der Versuche, die das Update verschieben können. DeferralValue="${10}" # Wenn nicht in $10 gesetzt ist, wird hier der Standard gesetzt. Dieser kann den in $4 geändert werden. if [[ -z "$DeferralValue" ]]; then DeferralValue=3 fi ###################################################################################################################################################### # Liest den Wert aus der Plist aus. Dieser wird dann in der StandardUpdatePrompt Ausgabe mit angegeben. CurrentDeferralValue="$(/usr/libexec/PlistBuddy -c "print :$BundleID:count" "$DeferralPlist" 2>/dev/null)" # Richten Sie den Verzögerungswert ein, falls er noch nicht vorhanden ist if [[ -z "$CurrentDeferralValue" ]] || [[ "$CurrentDeferralValue" =~ "File Doesn't Exist" ]]; then setDeferral "$BundleID" "$DeferralType" "$DeferralValue" "$DeferralPlist" CurrentDeferralValue="$(/usr/libexec/PlistBuddy -c "print :$BundleID:count" "$DeferralPlist" 2>/dev/null)" fi jamfHelper="/Library/Application Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper" jamf="/usr/local/bin/jamf" ###################################################################################################################################################### # Gibt die Zeit in Sekunden, wie lange das Fenster bleiden soll TimeOutinSec="${11}" # Falls kein Wert ind $5 gesetzt worden ist, wird dieser hier bestimmt und als Standard genutzt. if [[ -z "$DeferralValue" ]]; then TimeOutinSec="900" fi ###################################################################################################################################################### # Neistart erforderlich? ###################################################################################################################################################### RebootRequired="${7}" if [ "$RebootRequired" == "ja" ]; then RebootMessage="Nach den Update wird der Rechner neu gestartet." Reboot="shutdown -r now" fi ###################################################################################################################################################### # Muss die App vor dem Update beendet werden? ###################################################################################################################################################### AppQuitRequired="${5}" ProcessName="${6}" tell () { killall "$ProcessName" } if [ "$AppQuitRequired" == "ja" ]; then QuitApp=tell fi ###################################################################################################################################################### AppName="${4}" # Standard Update Message StandardUpdatePrompt="Für $AppName ist ein Update verfügbar. Klicken Sie auf Fortsetzen, um mit der Installation zu beginnen. Wenn Sie den Vorgang zu diesem Zeitpunkt nicht starten können, können Sie den Vorgang um einen Tag verschieben. Tage bis zur erzwungenen Installation: $CurrentDeferralValue Tage Sie können jederzeit die Installation über den ING Germany Self Service durchführen. Nach Ablauf der Frist wird ein Update aus Sicherheitsgründen erzwungen ! $RebootMessage " # Erzwungene Aktualisierungsnachricht ForcedUpdatePrompt="Für Ihren Rechner ist ein $AppName Update notwendig. Sie haben die Aktualisierung bereits so oft wie möglich verschoben. Bitte speichern Sie Ihre Arbeit jetzt und klicken Sie auf Aktualisieren. Das Update wird ansonsten automatisch durchgeführt. $RebootMessage " # INGIcon 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" ## Functions ## RunPolicy="${8}" updateGUI (){ rm -rf "$DeferralPlist" $QuitApp jamf policy -id $RunPolicy $Reboot } # Jemand ist angemeldet. Aufforderung, falls Updates NUR dann neu gestartet werden müssen, wenn der Update-Timer nicht Null erreicht hat if [[ "$CurrentDeferralValue" -gt 0 ]]; then # Reduzieren Sie den Timer um 1. Das Skript wird am nächsten Tag erneut ausgeführt let CurrTimer=$CurrentDeferralValue-1 setDeferral "$BundleID" "$DeferralType" "$CurrTimer" "$DeferralPlist" HELPER=$("$jamfHelper" -windowType utility -icon "$INGIcon" -title "ING Germany Notification" -description "$StandardUpdatePrompt" -button1 "Fortsetzen" -button2 "Verschieben" -cancelButton "2" -defaultButton 2 -timeout "$TimeOutinSec") echo "Jamf Helper Exit Code: $HELPER" # Wenn sie auf "Aktualisieren" klicken, werden sie zum Einstellungsbereich für Software-Updates weitergeleitet if [ "$HELPER" == "0" ]; then updateGUI fi exit 0 else HELPER=$("$jamfHelper" -windowType utility -icon "$INGIcon" -title "ING Germany Notification" -description "$ForcedUpdatePrompt" -button1 "Update" -defaultButton 1 -timeout "$TimeOutinSec" -countdown -alignCountdown "right") echo "Jamf Helper Exit Code: $HELPER" # Wenn sie auf Updates installieren klicken, führen Sie die Updates aus # Offenbar hat jemand versucht, jamfHelper zu beenden, oder der jamfHelper-Bildschirm hat eine Zeitüberschreitung # Der Timer ist bereits 0, die Updates werden automatisch ausgeführt, der Endbenutzer wurde gewarnt! if [[ "$HELPER" == "0" ]] || [[ "$HELPER" == "239" ]]; then updateGUI fi fi exit 0