Catégories
Informatique

Fermer et supprimer une application macOS avec Jamf Pro

Vous gérez une flotte d’ordinateurs sous macOS et vous avez besoin de déinstaller une application de façon automatisée via Jamf Pro (ou un autre MDM, ça s’adapte)? Voici un script qui va vous aider!

Dans la gestion de parc informatique , les actions de masse et automatisées sont les méthodes les plus pratiques pour avoir une configuration similaire entre vos machines.

Le script qui suit peut vous aider à faire cela avec votre MDM.

Le script a été écrit par Graham Pugh et publié comme Gist sur son Github:

#!/bin/bash

#######################################################################
#
# Remove Application Script for Jamf Pro
#
# This script can delete apps that are sandboxed and live in /Applications
#
# The first parameter is used to kill the app. It should be the app name or path
# as required by the pkill command.
#
#######################################################################

# Inputted variables
appName="$4"

function silent_app_quit() {
# silently kill the application.
appName="$1"
if [[ $(pgrep -ix "$appName") ]]; then
echo "Closing $appName"
/usr/bin/osascript -e "quit app \"$appName\""
sleep 1

# double-check
countUp=0
while [[ $countUp -le 10 ]]; do
if [[ -z $(pgrep -ix "$appName") ]]; then
echo "$appName closed."
break
else
let countUp=$countUp+1
sleep 1
fi
done
if [[ $(pgrep -x "$appName") ]]; then
echo "$appName failed to quit - killing."
/usr/bin/pkill "$appName"
fi
fi
}

if [[ -z "${appName}" ]]; then
echo "No application specified!"
exit 1
fi

# quit the app if running
silent_app_quit "$appName"

# Now remove the app
echo "Removing application: ${appName}"

# Add .app to end when providing just a name e.g. "TeamViewer"
if [[ ! $appName == *".app"* ]]; then
appName=$appName".app"
fi

# Add standard path if none provided
if [[ ! $appName == *"/"* ]]; then
appToDelete="/Applications/$appName"
else
appToDelete="$appName"
fi

# Remove the application
/bin/rm -rf "${appToDelete}"

# Try to Forget the packages if we can find a match
# Loop through the remaining parameters
for package in "${@:5}"; do
if [[ ${package} ]]; then
/usr/sbin/pkgutil --pkgs | /usr/bin/grep -i "${package}" | /usr/bin/xargs /usr/bin/sudo /usr/sbin/pkgutil --forget
fi
done

Comment utiliser ce script?

Ajoutez le à vos scripts sur Jamf Pro puis configurez les paramètres 4 et 5 ainsi :

Paramètre 4 (obligatoire): Nom de l’application telle qu’elle est dans le système de fichiers avec ou sans le .app . Exemple TeamViewer / TeamViewer.app

Paramètre 5: entrez si vous voulez l’enlever la « receipt » du package, que vous pouvez trouver avec la commande pkgutil –pkgs | grep -i teamviewer à adapter à votre situation.

Ensuite créez une règle (Policy) qui fait appel à ce script et renseignez le paramètre 4, définissez une fréquence d’exécution etc etc.

Contrairement à quelques autres scripts que l’on peut trouver , celui de Graham tue l’application de façon silencieuse si elle s’exécute.

Dans le cas d’applications plus complexes avec de multiples dossiers à supprimer etc, il vous faudra personnaliser le script pour vos besoins.

Laisser un commentaire