Files
Alte_Skripte/ZZZZ_de.ing.Update_Notification.sh
2026-02-16 15:05:15 +01:00

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