mirror of
https://github.com/MLBZ521/MacAdmin.git
synced 2026-02-03 05:53:26 +00:00
v1.0 = Production Version
+ Merging createShortcut into master
This commit is contained in:
129
System Configs/create_Shortcut.sh
Normal file
129
System Configs/create_Shortcut.sh
Normal file
@@ -0,0 +1,129 @@
|
||||
#!/bin/bash
|
||||
|
||||
###################################################################################################
|
||||
# Script Name: create_Shortcut.sh
|
||||
# By: Zack Thompson / Created: 3/26/2018
|
||||
# Version: 1.0 / Updated: 4/5/2018 / By: ZT
|
||||
#
|
||||
# Description: This script will create a website shortcut in a specified location with a specified icon.
|
||||
#
|
||||
###################################################################################################
|
||||
|
||||
echo "***** Create Shortcut process: START *****"
|
||||
|
||||
##################################################
|
||||
# Define Variables
|
||||
# If using Jamf, change these values to: 4, 5, 6, 7
|
||||
fileName="${1}"
|
||||
URL="${2}"
|
||||
icon="${3}"
|
||||
location="${4}"
|
||||
|
||||
# Get the current user
|
||||
currentUser=$(/usr/bin/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");')
|
||||
defaultLocation="/Users/${currentUser}/Library/Shortcuts"
|
||||
|
||||
##################################################
|
||||
# Setup Functions
|
||||
|
||||
getHelp() {
|
||||
echo "
|
||||
usage: jamf_CreateShortcut.sh <filename> <URL> <icon> [<location> Dock | Desktop]
|
||||
|
||||
Info: This script will create a website shortcut in a specified location with a specified icon.
|
||||
|
||||
Parameters:
|
||||
filename The files' \"Display Name\".
|
||||
|
||||
URL The website the shortcut is for.
|
||||
|
||||
icon The image that will be used for the icon.
|
||||
|
||||
location Where the shortcut will be saved.
|
||||
"
|
||||
}
|
||||
|
||||
##################################################
|
||||
# Bits staged...
|
||||
|
||||
# Check to make sure all parameters were provided.
|
||||
if [ -z "${fileName}" -a -z "${URL}" -a -z "${icon}" -a -z "${location}" ]; then
|
||||
echo "ERROR: Missing required parameters!"
|
||||
# Function getHelp
|
||||
getHelp
|
||||
echo "***** Create Shortcut process: FAILED *****"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Provided configuration:"
|
||||
echo "Filename: ${fileName}"
|
||||
echo "URL: ${URL}"
|
||||
echo "Icon: ${icon}"
|
||||
echo "Location: ${location}"
|
||||
|
||||
# Create the staging directory if it doesn't existing.
|
||||
if [[ ! -d "${defaultLocation}" ]]; then
|
||||
/bin/mkdir "${defaultLocation}"
|
||||
fi
|
||||
|
||||
# Create the shortcut file.
|
||||
echo "Creating the requested shortcut..."
|
||||
/usr/bin/printf '%s\n' "[InternetShortcut]" "URL=${URL}" "" > "${defaultLocation}/${fileName}.url"
|
||||
|
||||
# If the icon provided is on a web server, download it.
|
||||
if [[ "${icon}" == "http"* ]]; then
|
||||
echo "Downloading icon..."
|
||||
/usr/bin/curl --silent --show-error --fail "${icon}" --output /tmp/icon.png
|
||||
# curlAPI=(--silent --show-error --fail --user --write-out "statusCode:%{http_code}")
|
||||
icon="/tmp/icon.png"
|
||||
fi
|
||||
|
||||
# Set the icon on the shortcut file.
|
||||
echo "Adding the requested icon..."
|
||||
/usr/bin/python -c "import Cocoa; import sys; Cocoa.NSWorkspace.sharedWorkspace().setIcon_forFile_options_(Cocoa.NSImage.alloc().initWithContentsOfFile_(sys.argv[1].decode('utf-8')), sys.argv[2].decode('utf-8'), 0) or sys.exit(\"Unable to set file icon\")" "${icon}" "${defaultLocation}/${fileName}.url"
|
||||
|
||||
# Check where to place the file.
|
||||
case "${location}" in
|
||||
Dock )
|
||||
# Setting a variable that holds whether the Dock item already exists or not (if it does, we don't want to unnecessarily edit and kill the Dock).
|
||||
alreadyExists=0
|
||||
|
||||
# Get the number of items in the persistent-others node; then subtract one for Array value notation.
|
||||
indexItem=$(/usr/libexec/PlistBuddy -x -c "Print :persistent-others" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist" | /usr/bin/xmllint --format - | /usr/bin/xpath 'count(//plist/array/dict)' 2>/dev/null)
|
||||
indexItem=$((indexItem-1))
|
||||
|
||||
# Loop through all the items in the persistent-others node and compare to the new item being added.
|
||||
for ((i=1; i<=$indexItem; ++i)); do
|
||||
indexLabel=$(/usr/libexec/PlistBuddy -c "Print :persistent-others:${i}:tile-data:file-label" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist")
|
||||
indexData=$(/usr/libexec/PlistBuddy -c "Print :persistent-others:${i}:tile-data:file-data:_CFURLString" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist")
|
||||
|
||||
# Check if the current indexItem values equal the new items' values.
|
||||
if [[ "${indexLabel}" == "${fileName}" && "${indexData}" == "file://${defaultLocation}/${fileName}.url" ]]; then
|
||||
alreadyExists=1
|
||||
echo "Already exists!"
|
||||
fi
|
||||
done
|
||||
|
||||
# If the new item does not already exist, add it to the Dock.
|
||||
if [[ $alreadyExists == 0 ]]; then
|
||||
echo "Adding to the dock..."
|
||||
fileNameLocation=$(echo "${fileName}" | /usr/bin/sed 's/ /%20/g')
|
||||
/usr/bin/sudo -s -u "${currentUser}" /usr/bin/defaults write "/Users/${currentUser}/Library/Preferences/com.apple.dock" persistent-others -array-add "<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>file://${defaultLocation}/${fileNameLocation}.url</string><key>_CFURLStringType</key><integer>15</integer></dict><key>file-label</key><string>${fileName}</string><key>file-type</key><integer>32</integer></dict><key>tile-type</key><string>file-tile</string></dict>"
|
||||
/usr/bin/killall Dock
|
||||
fi
|
||||
;;
|
||||
Desktop )
|
||||
# Move file to the specified location if not adding to the Dock.
|
||||
echo "Moving file in place..."
|
||||
/bin/mv "${defaultLocation}/${fileName}.url" "/Users/${currentUser}/Desktop"
|
||||
;;
|
||||
* )
|
||||
echo "ERROR: The specified location is not configurable at this time."
|
||||
# Function getHelp
|
||||
getHelp
|
||||
echo "***** Create Shortcut process: FAILED *****"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "***** Create Shortcut process: COMPLETE *****"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user