Files
dialog-scripts/MDMAppsDeploy.sh
Adam Codega ea27f9b609 Swap tabs for spaces, fix listitems creation
listitems creation was not taking into account app names with spaces, ie Google Chrome would be cut off into Google.
2022-02-28 18:38:10 -05:00

110 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
#
# Display a Dialog with a list of applications and indicate when they've been installed
# Useful when apps are deployed at random, without local logging, etc.
# Useful for Mosyle App Catalog deployments, VPP app deployments, etc.
#
# Requires Dialog v1.9.1 or later https://github.com/bartreardon/Dialog/releases
#
# List of apps to process
# Provide the display name as you prefer and the path to the app/file. ex: "Google Chrome,/Applications/Google Chrome.app"
# Tip: Check for something like print drivers using the pkg receipt, ex: "Konica-Minolta drivers,/var/db/receipts/jp.konicaminolta.print.package.C759.plist"
apps=(
"Google Chrome,/Applications/Google Chrome.app"
"Google Drive,/Applications/Google Drive.app"
"VLC,/Applications/VLC.app"
"zoom.us,/Applications/zoom.us.app"
)
# Dialog display settings, change as desired
title="Installing Apps"
message="Please wait while we download and install apps"
# location of dialog and dialog command file
dialogApp="/usr/local/bin/dialog"
dialog_command_file="/var/tmp/dialog.log"
# check we are running as root
if [[ $(id -u) -ne 0 ]]; then
echo "This script should be run as root"
exit 1
fi
# *** functions
# execute a dialog command
function dialog_command(){
echo "$1"
echo "$1" >> $dialog_command_file
}
function finalise(){
dialog_command "progresstext: Install of applications complete"
dialog_command "progress: complete"
dialog_command "button1text: Done"
dialog_command "button1: enable"
exit 0
}
function appCheck(){
dialog_command "listitem: $(echo "$app" | cut -d ',' -f1): wait"
while [ ! -e "$(echo "$app" | cut -d ',' -f2)" ]
do
sleep 2
done
dialog_command "progresstext: Install of \"$(echo "$app" | cut -d ',' -f1)\" complete"
dialog_command "listitem: $(echo "$app" | cut -d ',' -f1): ✅"
progress_index=$(( progress_index + 1 ))
echo "at item number $progress_index"
}
# *** end functions
# set progress total to the number of apps in the list
progress_total=${#apps[@]}
# set icon based on whether computer is a desktop or laptop
hwType=$(/usr/sbin/system_profiler SPHardwareDataType | grep "Model Identifier" | grep "Book")
if [ "$hwType" != "" ]; then
icon="SF=laptopcomputer.and.arrow.down,weight=thin,colour1=#51a3ef,colour2=#5154ef"
else
icon="SF=desktopcomputer.and.arrow.down,weight=thin,colour1=#51a3ef,colour2=#5154ef"
fi
dialogCMD="$dialogApp -p --title \"$title\" \
--message \"$message\" \
--icon \"$icon\" \
--progress $progress_total \
--button1text \"Please Wait\" \
--button1disabled"
# create the list of apps
listitems=""
for app in "${apps[@]}"; do
listitems="$listitems --listitem '$(echo "$app" | cut -d ',' -f1)'"
done
# final command to execute
dialogCMD="$dialogCMD $listitems"
echo "$dialogCMD"
# Launch dialog and run it in the background sleep for a second to let thing initialise
eval "$dialogCMD" &
sleep 2
progress_index=0
(for app in "${apps[@]}"; do
step_progress=$(( 1 + progress_index ))
dialog_command "progress: $step_progress"
appCheck &
done
wait)
# all done. close off processing and enable the "Done" button
finalise