Skip to main content
Solved

Problems using osascript Display Dialog with -event policy


Forum|alt.badge.img+7

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.

Best answer by HenryOzsoy

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.

View original
Did this topic help you find an answer to your question?

3 replies

Forum|alt.badge.img+12
  • Valued Contributor
  • 359 replies
  • November 7, 2019

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.


Tangentism
Forum|alt.badge.img+10
  • Honored Contributor
  • 144 replies
  • November 7, 2019

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"

Forum|alt.badge.img+7
  • Author
  • Contributor
  • 31 replies
  • Answer
  • November 7, 2019

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.


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings