202 lines
9.2 KiB
Bash
202 lines
9.2 KiB
Bash
#!/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 $10 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 "$TimeOutinSec" ]]; 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" -countdown -alignCountdown "right")
|
|
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 |