207 lines
9.1 KiB
Bash
207 lines
9.1 KiB
Bash
#!/bin/bash
|
|
|
|
##########################################################################
|
|
# Shellscript : Notification.
|
|
# Autor : Andreas Vogel, macenterprise gmbh, 2020
|
|
##########################################################################
|
|
######################################################################################################################################################
|
|
#Variablen
|
|
#
|
|
#
|
|
# BundleID="${1}" -> Wird aus dem System übergeben.
|
|
# DeferralType="${2}" -> Wird aus dem System übergeben.
|
|
# DeferralValue="${3}" -> Wird aus dem System übergeben.
|
|
# DeferralPlist="${4}" -> INGDiBa muss bestehen Bleiben! Darf nicht freibleiben!!!! -> Pflicht
|
|
# AppName="${5}" -> Name der App -> Pflicht
|
|
# App_ID="${6}" ->
|
|
# ProcessName="${7}"
|
|
# App_Icon="${8}" -> Welcher Icon angezeigt wird.
|
|
# RunPolicy="${9}"
|
|
# DeferralPlist="${10}" -> Gibt an, wie oft das Update verschoben werden kann -> Optional
|
|
# AppQuitRequired="${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.
|
|
|
|
################################ Alerter Version##########################
|
|
macOS_Version=$(sw_vers -productVersion)
|
|
|
|
if [[ "$macOS_Version" == *"10.15"* ]]
|
|
then
|
|
alerter_verion=/Library/Application\ Support/JAMF/alerter
|
|
else
|
|
alerter_verion=/Library/Application\ Support/JAMF/alerter\ 2
|
|
fi
|
|
echo $alerter_verion
|
|
######################################################################################################################################################
|
|
fGetCurrenUser (){
|
|
currentUser=`python -c 'from SystemConfiguration import SCDynamicStoreCopyConsoleUser; import sys; username = (SCDynamicStoreCopyConsoleUser(None, None, None) or [None])[0]; username = [username,""][username in [u"loginwindow", None, u""]]; sys.stdout.write(username + "\n");'`
|
|
|
|
# Identify the UID of the logged-in user
|
|
currentUserUID=`id -u "$currentUser"`
|
|
}
|
|
|
|
user=$(stat -f '%u %Su' /dev/console | cut -d ' ' -f 2)
|
|
|
|
######################################################################################################################################################
|
|
|
|
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
|
|
}
|
|
######################################################################################################################################################
|
|
App_ID="${6}"
|
|
AppName="${5}"
|
|
DeferralPlist="/Library/Application Support/JAMF/ING/de.ing.$App_ID.plist"
|
|
BundleID="de.ing.$App_ID"
|
|
DeferralType="count"
|
|
App_Icon="${8}"
|
|
######################################################################################################################################################
|
|
# 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
|
|
|
|
######################################################################################################################################################
|
|
# Gibt die Zeit in Sekunden, wie lange das Fenster bleiden soll
|
|
#TimeOutinSec="${Parameter}"
|
|
## Falls kein Wert ind $Parameter gesetzt worden ist, wird dieser hier bestimmt und als Standard genutzt.
|
|
#if [[ -z "$TimeOutinSec" ]]
|
|
# then
|
|
# TimeOutinSec="900"
|
|
#fi
|
|
|
|
TimeOutinSec="870"
|
|
######################################################################################################################################################
|
|
# Muss die App vor dem Update beendet werden?
|
|
######################################################################################################################################################
|
|
AppQuitRequired="${11}"
|
|
ProcessName="${7}"
|
|
|
|
GracefullykillApp () {
|
|
osascript <<EOF - 2>/dev/null
|
|
quit app "$ProcessName"
|
|
EOF
|
|
}
|
|
|
|
tell () {
|
|
while [ ! -z "$(pgrep -i "$ProcessName")" ]
|
|
do
|
|
GracefullykillApp
|
|
|
|
if [[ -z "$(pgrep -i "$ProcessName")" ]]; then
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
if [ "$AppQuitRequired" == "ja" ]
|
|
then
|
|
|
|
QuitApp=tell
|
|
|
|
fi
|
|
######################################################################################################################################################
|
|
# Standard Update Message
|
|
StandardUpdatePrompt="Für $AppName ist ein Update verfügbar.
|
|
"
|
|
|
|
# Erzwungene Aktualisierungsnachricht
|
|
ForcedUpdatePrompt="Das Update für $AppName wird nun durchgeführt.
|
|
"
|
|
|
|
|
|
## Functions ##
|
|
|
|
RunPolicy="${9}"
|
|
|
|
updateGUI (){
|
|
|
|
rm -rf "$DeferralPlist"
|
|
$QuitApp
|
|
jamf policy -id $RunPolicy
|
|
}
|
|
|
|
# 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
|
|
fGetCurrenUser
|
|
# 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"
|
|
|
|
Alerter="$(/bin/launchctl asuser "$currentUserUID" "$alerter_verion" -appIcon "$App_Icon" -title "Client Service Mac" -message "$StandardUpdatePrompt" -closeLabel "Aktualisieren" -actions "Verschieben ($CurrentDeferralValue)","Im Self Service anzeigen" -dropdownLabel "Mehr Optionen" -timeout $TimeOutinSec)"
|
|
|
|
echo "Alerter Exit Code: $Alerter"
|
|
|
|
# Wenn sie auf "Aktualisieren" klicken, werden sie zum Einstellungsbereich für Software-Updates weitergeleitet
|
|
if [ "$Alerter" == "Aktualisieren" ]; then
|
|
updateGUI
|
|
|
|
elif [ "$Alerter" == "Im Self Service anzeigen" ] || [[ "$Alerter" == "@CONTENTCLICKED" ]]; then
|
|
/bin/launchctl asuser "$currentUserUID" sudo -u "$user" /usr/bin/open "jamfselfservice://content?entity=policy&id=$RunPolicy&action=view"
|
|
|
|
fi
|
|
|
|
exit 0
|
|
else
|
|
fGetCurrenUser
|
|
|
|
Alerter="$(/bin/launchctl asuser "$currentUserUID" "$alerter_verion" -appIcon "$App_Icon" -title "Client Service Mac" -message "$ForcedUpdatePrompt" -actions "Jetzt Aktualisieren" -closeLabel "Kein Verschieben mehr" -timeout $TimeOutinSec)"
|
|
|
|
echo "Alerter Exit Code: $Alerter"
|
|
|
|
# Wenn sie auf Updates installieren klicken, führen Sie die Updates aus
|
|
# Der Timer ist bereits 0, die Updates werden automatisch ausgeführt, der Endbenutzer wurde gewarnt!
|
|
if [ "$Alerter" == "Jetzt Aktualisieren" ] || [[ "$Alerter" == "@TIMEOUT" ]] || [[ "$Alerter" == "Kein Verschieben mehr" ]] || [[ "$Alerter" == "@CONTENTCLICKED" ]]; then
|
|
updateGUI
|
|
fi
|
|
fi
|
|
exit 0 |