Files
Alte_Skripte/IBM_Nitify_final.sh
2026-02-16 15:05:15 +01:00

167 lines
6.5 KiB
Bash
Executable File

#!/bin/bash
##########################################################################
# Script : Patch Policy
# Autor : Andreas Vogel NEXT Enterprise GmbH
# Quelle : https://github.com/IBM/mac-ibm-notifications
##########################################################################
################ Varialen ################################################
CurrentUser=$(/usr/sbin/scutil <<< "show State:/Users/ConsoleUser" | /usr/bin/awk -F': ' '/[[:space:]]+Name[[:space:]]:/ { if ( $2 != "loginwindow" ) { print $2 }}')
Language=$(/usr/libexec/PlistBuddy -c 'print AppleLanguages:0' "/Users/${CurrentUser}/Library/Preferences/.GlobalPreferences.plist")
if [[ $Language = de* ]]; then
UserLanguage="de"
else
UserLanguage="en"
fi
JSSURL="https://macenterprise.jamfcloud.com/JSSResource"
JSSUSER="API_User"
JSSPASSWORD="Nextenterprise#1612"
UDID=$(system_profiler SPHardwareDataType | grep UUID | awk '" " { print $NF }')
xsltFile="/tmp/xsltTemplate.xsl"
xmlFile="/tmp/fileName.xml"
xmlupdates="/tmp/updates.xml"
# Writes out an xslt form
/bin/cat <<EOF > "$xsltFile"
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="computer_management/policies/policy">
<xsl:value-of select="id"/>
<xsl:text> </xsl:text>
<xsl:value-of select="name"/>
<xsl:text> </xsl:text>
<xsl:value-of select="triggers"/>
<xsl:text> </xsl:text>
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
EOF
/usr/bin/curl -u $JSSUSER:$JSSPASSWORD --tlsv1.2 -H "Accept: application/xml" "$JSSURL/computermanagement/udid/$UDID/subset/policies" | xsltproc "$xsltFile" - > $xmlFile
Update_Count=$(grep -c "patch_app_updates" "$xmlFile")
sed '/patch_app_updates/!d' $xmlFile > $xmlupdates
IDs=($(awk '{ print $1 }' $xmlupdates))
##########################################################################
################ Customized Notifier #####################################
##########################################################################
COUNTER=0
################ Message #################################################
if [[ "$Update_Count" -eq 1 ]]; then
Plural_en=" "
Plural_de=" "
elif [[ "$Update_Count" -gt 1 ]]; then
Plural_en="s "
Plural_de="s "
else
echo "no patches found, exiting"
exit 0
fi
Plural=Plural_${UserLanguage}
Notifier_Path="/Applications/IBM Notifier.app/Contents/MacOS/IBM Notifier"
Type_Message="popup"
Icon_Path="/Library/Application Support/Next Enterprise/Next_logo_48x48.png"
Bar_Title_Message_en="Update${!Plural}Available"
Title__Message_en="Software Update${!Plural}Available"
Description_Message_en="You have ${Update_Count} update${!Plural}available in the Self Service."
Button_1_Message_en="Update"
Button_2_Message_en="Cancel"
Bar_Title_Message_de="Update${!Plural}verfügbar"
Title__Message_de="Software Update${!Plural}verfügbar"
Description_Message_de="Es sind ${Update_Count} update${!Plural}im Self Service Verfügung."
Button_1_Message_de="Update"
Button_2_Message_de="Abbrechen"
Bar_Title_Message=Bar_Title_Message_${UserLanguage}
Title_Message=Title__Message_${UserLanguage}
Description_Message=Description_Message_${UserLanguage}
Button_1_Message=Button_1_Message_${UserLanguage}
Button_2_Message=Button_2_Message_${UserLanguage}
################ Progress ################################################
Type_Progress="popup"
ACCESSORYTYPE="progressbar"
Bar_Title_Progress_en="Update"
Title_Progress_en="Updating the old app${!Plural}"
Description_Progress_en="The update process is in progress. Please wait until all updates have been installed. The process is completely automatic. Please do not restart the device while the message is displayed."
ACCESSORYPAYLOAD_en="/percent indeterminate /bottom_message All available updates will be installed....."
Update_Inventory_Message_en="Updating Inventory......"
Update_Steps_en="Step"
Count_Steps_en="of"
Update_Progress_Message_en="Update"
Bar_Title_Progress_de="Update"
Title_Progress_de="Aktualisierung der alten App${!Plural}"
Description_Progress_de="Der Aktualisierungsvorgang ist in Arbeit. Bitte warte, bis alle Updates installiert worden sind. Der Vorgang läuft vollständig automatisch ab. Bitte starte das Gerät während die Meldung angezeigt wird, nicht neu."
ACCESSORYPAYLOAD_de="/percent indeterminate"
Update_Inventory_Message_de="Aktualisierung des Bestandsverzeichnisses....."
Update_Steps_de="Schritt"
Count_Steps_de="von"
Update_Progress_Message_de="Aktuallisiere"
Update_Inventory_Message=Update_Inventory_Message_${UserLanguage}
Bar_Title_Progress=Bar_Title_Progress_${UserLanguage}
Title_Progress=Title_Progress_${UserLanguage}
Description_Progress=Description_Progress_${UserLanguage}
ACCESSORYPAYLOAD=ACCESSORYPAYLOAD_${UserLanguage}
Update_Steps=Update_Steps_${UserLanguage}
Count_Steps=Count_Steps_${UserLanguage}
Update_Progress_Message=Update_Progress_Message_${UserLanguage}
################ Function ################################################
policy_progress() {
pipe_name="pbnota"
# FIFO creation and setup process for updating the progress bar
find /private/tmp -name "$pipe_name" -delete
mkfifo /private/tmp/${pipe_name}
exec 5<> /private/tmp/${pipe_name}
# IBM Notifier Progress Bar configuration
sudo -u "${CurrentUser}" "${Notifier_Path}" \
-type "${Type_Progress}" \
-title "${!Title_Progress}" \
-bar_title "${!Bar_Title_Progress}" \
-subtitle "${!Description_Progress}" \
-icon_path "${Icon_Path}" \
-accessory_view_type "${ACCESSORYTYPE}" \
-always_on_top \
-accessory_view_payload "${!ACCESSORYPAYLOAD}" < /private/tmp/${pipe_name} &
for i in ${IDs[@]}
do
let COUNTER++
PolicyName=$(/usr/bin/curl -u $JSSUSER:$JSSPASSWORD --tlsv1.2 -H "Accept: application/xml" "$JSSURL/policies/id/$i" | xmllint --xpath '/policy/general/name/text()' - 2>/dev/null)
echo "/bottom_message ${!Update_Steps} $COUNTER ${!Count_Steps} $Update_Count ${!Update_Progress_Message}: $PolicyName" >&5
jamf policy -id $i -forceNoRecon
done
}
################ Checking the available updates ##########################
ButtonClicked=$("sudo" "-u" "${CurrentUser}" "${Notifier_Path}" "-type" "${Type_Message}" "-bar_title" "${!Bar_Title_Message}" "-title" "${!Title_Message}" "-subtitle" "${!Description_Message}" "-icon_path" "${Icon_Path}" "-always_on_top" "-main_button_label" "${!Button_1_Message}"; echo $?)
echo $ButtonClicked
if [[ "$ButtonClicked" -eq 0 ]]; then
policy_progress
fi
find /private/tmp -name "$pipe_name" -delete