Posted on 11-06-2019 07:42 PM
I want to run a bash script that uses osascript display dialog to prompt the current user for with 3 options. Base on the user's choice I want the script to call on custom triggers I have set for jamf policies. Unfortunately, it doesn't execute the jamf -event command without an admin password. I looked into jamfhelper yet I need 3 button option. Is there a different approach I can use or would I need change the script?
#!/bin/sh
/usr/bin/osascript <<-EndOfScript
tell application "Finder"
activate
display dialog "In order for the workflow to complete, please indicate who this device is being prepared for." buttons {"Red", "Blue", "Orange"} with icon stop with title "Important!"
if button returned of result = "Red" then
do shell script "/usr/local/bin/jamf policy -event redpolicy"
else
if button returned of result = "Blue" then
do shell script "/usr/local/bin/jamf policy -event redpolicy; /usr/local/bin/jamf policy -event bluepolicy"
else
if button returned of result = "Orange" then
do shell script "/usr/local/bin/jamf policy -event redpolicy; /usr/local/bin/jamf policy -event orangepolicy"
end if
end if
end if
end tell
EndOfScript
Thanks in advance.
Solved! Go to Solution.
Posted on 11-07-2019 02:36 PM
Thanks @Tangentism ,
Before your post, I was actually tinkering around and had come to the same conclusion.
I had to swap from display dialog to choose from list as the display dialog output would not refelct in my if statements.
Here is what I ended up with,
#!/bin/sh
#Workflow Chooser
# Will prompt a choose from list box to the tech preparing device so they can indicate who the machine is being prepped for,
# then will initiate the final workflow policies in JSS according to the Tech's output.
#Logged in user info and UID
loggedInUser=$(stat -f%Su /dev/console)
loggedInUID=$(id -u $loggedInUser)
#chose from list box as a variable
computerType=$(/bin/launchctl asuser $loggedInUID sudo -iu $loggedInUser << EOF
/usr/bin/osascript -e 'tell application "System Events"
activate
choose from list {"Student Device", "Staff Device @X", "Staff Device @Y"}
end tell' 2>/dev/null
EOF
)
#if (( $? ));
if [[ "$computerType" == "Student Device" ]] ; then
/usr/local/bin/jamf policy -event finalconfig
fi
if [[ "$computerType" == "Staff Device @X" ]] ; then
/usr/local/bin/jamf policy -event finalconfig; /usr/local/bin/jamf policy -event @X
fi
if [[ "$computerType" == "Staff Device @Y" ]] ; then
/usr/local/bin/jamf policy -event finalconfig; /usr/local/bin/jamf policy -event @Y
fi
exit 0
Works great.
Posted on 11-07-2019 12:46 AM
If I remember correctly osascripts are always executed as the user, not as root, whereas all other scripts are running as root. I think the easiest way out is to use a shell script that uses osascript only to get the feedback from the user.
Posted on 11-07-2019 02:53 AM
Why not have the Applescript as a bash variable so the result is returned? It would be more simple and adhere to DRY principles as well.
Something along the lines of....
#!/usr/bin/env bash
button=$(/usr/bin/osascript << EOF
tell application "Finder"
activate
display dialog "In order for the workflow to complete, please indicate who this device is being prepared for." buttons {"Red", "Blue", "Orange"} with icon stop with title "Important!"
end tell
EOF)
# run policy with returned value
/usr/local/bin/jamf policy -event "$button"
Posted on 11-07-2019 02:36 PM
Thanks @Tangentism ,
Before your post, I was actually tinkering around and had come to the same conclusion.
I had to swap from display dialog to choose from list as the display dialog output would not refelct in my if statements.
Here is what I ended up with,
#!/bin/sh
#Workflow Chooser
# Will prompt a choose from list box to the tech preparing device so they can indicate who the machine is being prepped for,
# then will initiate the final workflow policies in JSS according to the Tech's output.
#Logged in user info and UID
loggedInUser=$(stat -f%Su /dev/console)
loggedInUID=$(id -u $loggedInUser)
#chose from list box as a variable
computerType=$(/bin/launchctl asuser $loggedInUID sudo -iu $loggedInUser << EOF
/usr/bin/osascript -e 'tell application "System Events"
activate
choose from list {"Student Device", "Staff Device @X", "Staff Device @Y"}
end tell' 2>/dev/null
EOF
)
#if (( $? ));
if [[ "$computerType" == "Student Device" ]] ; then
/usr/local/bin/jamf policy -event finalconfig
fi
if [[ "$computerType" == "Staff Device @X" ]] ; then
/usr/local/bin/jamf policy -event finalconfig; /usr/local/bin/jamf policy -event @X
fi
if [[ "$computerType" == "Staff Device @Y" ]] ; then
/usr/local/bin/jamf policy -event finalconfig; /usr/local/bin/jamf policy -event @Y
fi
exit 0
Works great.