-
Notifications
You must be signed in to change notification settings - Fork 51
Script Examples
Simone Martorelli edited this page Apr 30, 2024
·
7 revisions
While the IBM Notifier (Mac@IBM Notifications) app can be run without administrative permissions, any framework that executes scripts outside of the user context will require that you capture and impersonate that user to display the popup.
Below are two script examples of a Pop-up Dialog box that can be run either locally or through an MDM script delivery framework like Jamf. The additional examples that follow are intended to be executed locally for testing purposes.
Shell
#!/bin/bash
# IBM Notifier binary paths
NA_PATH="/Applications/IBM Notifier.app/Contents/MacOS/IBM Notifier"
# Variables for the popup notification for ease of customization
WINDOWTYPE="popup"
BAR_TITLE="My Organization's Notification"
TITLE="Enter App Specific Title Here"
TIMEOUT="" # leave empty for no notification time
BUTTON_1="OK"
BUTTON_2="Cancel"
SUBTITLE="Enter popup information here. \n\nThis can be whatever you want."
### FUNCTIONS ###
prompt_user() {
# This will call the IBM Notifier Agent
# USAGE: prompt_user "1" for two buttons, otherwise just the function for one
if [[ "${#1}" -ge 1 ]]; then
sec_button=("-secondary_button_label" "${BUTTON_2}")
fi
button=$("${NA_PATH}" \
-type "${WINDOWTYPE}" \
-bar_title "${BAR_TITLE}" \
-title "${TITLE}" \
-subtitle "${SUBTITLE}" \
-timeout "${TIMEOUT}" \
-main_button_label "${BUTTON_1}" \
"${sec_button[@]}" \
-always_on_top)
echo "$?"
}
### END FUNCTIONS ###
# Example 1 button prompt
RESPONSE=$(prompt_user)
echo "$RESPONSE"
# Example 2 button prompt
RESPONSE=$(prompt_user "1")
echo "$RESPONSE"
Python
#!/usr/bin/env python3
# Put the rest of your python libraries below this list if required
import subprocess
from SystemConfiguration import SCDynamicStoreCopyConsoleUser
# IBM Notifier binary path
NA_PATH = "/Applications/IBM Notifier.app/Contents/MacOS/IBM Notifier"
# Variables for the popup notification for ease of customization
WINDOWTYPE = "popup"
BAR_TITLE = "My Organization's Notification"
TITLE = "Enter App Specific Title Here"
TIMEOUT = "" # leave empty for no notification time
BUTTON_1 = "OK"
BUTTON_2 = "Cancel"
SUBTITLE = "Enter popup information here. \n\nThis can be whatever you want."
"""### FUNCTIONS ###"""
def prompt_user(two_button):
"""This will call the IBM Notifier Agent
USAGE: prompt_user('1') for two buttons, otherwise just prompt_user('') for one"""
nota = [
NA_PATH,
"-type", WINDOWTYPE,
"-bar_title", BAR_TITLE,
"-title", TITLE,
"-subtitle", SUBTITLE,
"-timeout", TIMEOUT,
"-main_button_label", BUTTON_1,
"-always_on_top",
]
if two_button != "":
sec_button = ["-secondary_button_label", BUTTON_2]
temp_list = nota[: len(nota) - 1] + sec_button + nota[len(nota) - 1 :]
nota = temp_list
proc = subprocess.run(nota, check=False)
return proc.returncode
"""### END FUNCTIONS ###"""
if __name__ == "__main__":
# Example 1 button prompt
BUT_RESP = prompt_user("")
print(BUT_RESP)
# Example 2 button prompt
BUT_RESP = prompt_user("1")
print(BUT_RESP)
Thanks @homebysix (Elliot Jordan) for this!
Shell
#!/bin/bash
# Deploy an encoded jpg within the script to be used within a dialog popup
# IBM Notifier binary paths
NA_PATH="/Applications/IBM Notifier.app/Contents/MacOS/IBM Notifier"
# Variables for the popup notification for ease of customization
WINDOWTYPE="popup"
BAR_TITLE="My Organization's Notification"
TITLE="Enter App Specific Title Here"
TIMEOUT="" # leave empty for no notification time
BUTTON_1="OK"
BUTTON_2="Cancel"
SUBTITLE="Enter popup information here. \n\nThis can be whatever you want."
# Base64 encoded picture, can be replaced with a static location in -accessory_view_payload
# The benefit here is that a custom picture can be distributed with a script without requiring a separate
# payload to deliver it if it is not accessible via network path
PU_PIC="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AAMAAAACZmYAAwAAAAJmZgAAAAIzMzQAAAAAAjMzNAAAAAACMzM0AP/AABEIAR8BLQMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2wBDABwcHBwcHDAcHDBEMDAwRFxEREREXHRcXFxcXHSMdHR0dHR0jIyMjIyMjIyoqKioqKjExMTExNzc3Nzc3Nzc3Nz/2wBDASIkJDg0OGA0NGDmnICc5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ub/3QAEABP/2gAMAwEAAhEDEQA/AMOiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9DDooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Rw6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqdYHYZJoa3YDIwanmRp7Kdr2IKKKKozCiiigAooooAKKKKAP//Sw6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFFWbdAwLGqtXLc/KfrUz2NqCTnqTkqoy1Irq43CoZIS7ZzxUyIEGBWOh3JyctdircKFfI71Xqadgz8dqhreOx59W3NoFFFFMzCiiigAooooA//08OiiigAooooAKKKKAQoBJwKCCDg0+P/AFi/WnT8SGlfWxaj7vMQ0UUUyAooooAKKKKACiiigAoopQCelA0r7CUUUUCCiiigAooooAKKKKACno5jORTKKGhxbWqLouEPJGDUTzkjCiq9FTyI1debVgoooqjEKKKKACiiigAooooA/9TDooooAKKKKACiiigCSL/WCnXH+spsf+sFPuP9ZUP4jZfw36kFFFFWYhRRRQAUUUUAFFFFABVq26saq1aturfhUSNqPxld/vn602nyffb60yqWxnJasKKKKZIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//1cOiiigAooooAKKKKAHKcMDVi5HIb1qr05q5J88QNRLdG8PgcSnRRRVmAUUUUAFFFFABRRRQAVbtup/CqlWbbjP4VEtjah8ZFIMO1R1NOMSmoapbET3YUUUUyAooooAKKKKACiiigAoqaGMSE7uwqIjBIHalcpwaVxKKKKZIUUUUAFFFFABRRRQB/9bDooooAKKKKACiiigAq5F80RFU6sW5+YrUz2ubUH71iueOKKklG2Qio6a1RlJWbQUUUUxBRRRQAUUUUAFT25+fb6ioKfGdrg0pbF03aSZLcD5gfWq9XbgZTPof0qlSgaV42mFFFFUYBRRRQAUUUUAFFFFAFq26tVd/vN9as238X4VXf77fU1C+JnRP+GhlFFFWc4UUUUAFFFFABRRRQB//18OiiigAooooAKKKKACpIzhxUdTQAF/mpS2Lh8SJZomd8rUf2eSrpOMkmoTcIOnNZKTex2TpQTvJkH2eSk8iQVL9pHpR9p9qq8jJxpdyLyZKTyX9Kl+0+1H2k+lF5By0u5F5L+lHkv6GpftJ9KT7QfQUXkJxpERicc4NR8jkdqsG4YjAwKrk5/GrV3uZSUF8Jogb4xnuKzqu27ZQj0qvMu2Qiojo7G1b3oqRFRRRWhyhRRRQAUUUUAFFFFAFu1/i+tV5Pvt9as23f61Wk++frUL4mdE/4aGUUUVZzhRRRQAUUUUAFFFFAH//0MOiiigAooooAKKKKACjntRQKBouxHzIiD1qmRg1Ytm5K1FKNrkVnHRm89YKRHRRRWhzhRRRQAUUUUAFFFFAFi2OH2+tOuR0aoIztcGrkwzGfbms38R10/eptFCiiitDkCiiigAooooAKKKKALlt0b61Wk++as23RvrVaT75rNfEzpn/AA0MooorQ5gooooAKKKKACiiigD/0cOiiigAooooAKKKKACiiigCSI7XBqW5HzA1XBwc1cl+aMGoejOiGsGilRRRVnOFFFFABRRRQAUUUUAFaXDp9RWbV+E5jHtWc0dWGerRRNJUkow5FR1aehzyVmwooopkhRRRQAUd6KKALlt90/Wq8v8ArDVi2+6frVeX/WNWa+JnVU/hIjooorQ5QooooAKKKKACiiigD//Sw6KKKACiiigAooooAKKKKACry/ND+FUau25ypBqJnRh92il2opWGCR70lUmYS3sFFFFMQUUUUAFFFFABV23+5+NUquW/3D9aipsdGH+Mhn/1hqGprj/WmoaqOxlU+JhRRRTICiiigAooooAuW/3DVeX/AFjVZt/uGq0v+sas18TOqf8ACRHRRRWhyhRRRQAUUUUAFFFFAH//08OiiigAooooAKKKKACiiigAqzbH5iKrVNAcSVMtjWi7SQkww5qKrFwPnzVenHYVRWkwooopmYUUUUAFFFFABVu2PDD3qpVi3PzEetRLY2oO00NuP9aahqe4/wBYagqo7E1PiYUUUUzMKKKKACiiigC7b/cNVpf9Y1WLb7h+tV5v9Y1Zx+JnVP8AhIjooorQ5QooooAKKKKACiiigD//1MOiiigAooooAKKKKACiiigAqSLhwajpQcEGk9hxdmmWLjqKrVNNIJCCB0qGlHY0qu8m0FFFFUZBRRRQAUUUUAFORijbhTaKBp2d0PkcyNuNMooo2Bu+rCiiigQUUUUAFFFFAFy3+4frUE3+tJpYpfLG0jIqNm3MTUJe8dE5p00htFFFWc4UUUUAFFFFABRRRQB//9XDooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Ww6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/18OiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9DDooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Z"
# Draw the pop-up with custom embedded picture
RESPONSE=$("${NA_PATH}" \
-type "${WINDOWTYPE}" \
-bar_title "${BAR_TITLE}" \
-title "${TITLE}" \
-subtitle "${SUBTITLE}" \
-timeout "${TIMEOUT}" \
-main_button_label "${BUTTON_1}" \
-secondary_button_label "${BUTTON_2}" \
-accessory_view_type "image" \
-accessory_view_payload "${PU_PIC}" \
-always_on_top)
Shell
#!/bin/bash
RAND_QUOTE=("Making Things Faster" "Adding Sparkles" "Reticulating Splines" "Thowing Wrenches" \
"rm -rf'ing Directories" "Lorem Ipsumming" "Agitating Employees" "Eating Doughnuts")
PIPE_NAME="pbnota"
COUNTER=0
# FIFO creation and setup process for updating the progress bar
find /private/tmp -name "$PIPE_NAME" -delete
mkfifo /private/tmp/${PIPE_NAME}
exec 3<> /private/tmp/${PIPE_NAME}
# IBM Notifier Progress Bar configuration
"/Applications/IBM Notifier.app/Contents/MacOS/IBM Notifier" \
-type "popup" \
-title "Test Progress Bar" \
-subtitle "You should see some progress here" \
-accessory_view_type "progressbar" \
-accessory_view_payload "/percent 0 /user_interruption_allowed True" \
-main_button_label "OK" < /private/tmp/${PIPE_NAME} &
PB_PS=$(pgrep "IBM Notifier")
echo "$PB_PS"
# In this example we are doing a 5 digit increment up to 100 and updating the progress bar messages with a
# random selection from our quote array defined above. In real world usage your update commands would run
# in the until block and update your progress percentage and description accordingly.
until [[ "$COUNTER" -ge 100 ]]; do
if [[ $(pgrep -q "IBM Notifier"; echo $?) -ne 0 ]]; then
# Cancel initiated, roll back changes and break the until loop here
CANCEL=1
echo "Rolling back"
break
fi
COUNTER=$((COUNTER + 5))
QUOTE_NBR=$(jot -r 1 0 7)
echo -n "/percent $COUNTER /top_message ${RAND_QUOTE[$QUOTE_NBR]} /bottom_message ${COUNTER}% completed" >&3
sleep 1
done
wait "$PB_PS"
# Clean up the progress bar after completion or early exit
exec 3>&-
find /private/tmp -name ${PIPE_NAME} -delete
if [[ "$CANCEL" -eq 1 ]]; then
echo "Progress bar terminated early"
else
echo "Progress bar completed successfully"
fi
Shell
#!/bin/bash
# IBM Notifier binary paths
NA_PATH="/Applications/IBM Notifier.app/Contents/MacOS/IBM Notifier"
# Variables for the popup notification for ease of customization
WINDOWTYPE="onboarding"
PAYLOAD=$(cat <<-END
{
"pages":[
{
"title":"First page's title",
"subtitle":"First page's subtitle",
"body":"First page's body",
"mediaType":"image",
"mediaPayload":"http://image.address"
},
{
"title":"Second page's title",
"subtitle":"Second page's subtitle",
"body":"Second page's body",
"mediaType":"video",
"mediaPayload":"http://video.address"
},
{
"title":"Third page's title",
"subtitle":"Third page's subtitle",
"body":"Third page's body",
"mediaType":"image",
"mediaPayload":"base64encodedimage",
"infoSection":{
"fields":[
{
"label":"First label only"
},
{
"label":"Second label only"
},
{
"label":"Third label only"
}
]
}
}
]
}
END
)
### FUNCTIONS ###
prompt_user() {
button=$("${NA_PATH}" \
-type "${WINDOWTYPE}" \
-payload "${PAYLOAD}")
echo "$?"
}
### END FUNCTIONS ###
RESPONSE=$(prompt_user)
echo "$RESPONSE"
Python
#!/usr/bin/env python2.7
# Put the rest of your python libraries below this list if required
import subprocess
from SystemConfiguration import SCDynamicStoreCopyConsoleUser
# IBM Notifier binary paths
NA_PATH = '/Applications/IBM Notifier.app/Contents/MacOS/IBM Notifier'
# Variables for the popup notification for ease of customization
WINDOWTYPE = 'popup'
BAR_TITLE = "My Organization's Notification"
TITLE = 'Enter App Specific Title Here'
TIMEOUT = '' # leave empty for no notification time
BUTTON_1 = 'OK'
BUTTON_2 = 'Cancel'
SUBTITLE = 'Enter popup information here. \n\nThis can be whatever you want.'
'''### FUNCTIONS ###'''
def prompt_user(two_button):
'''This will call the IBM Notifier Agent
USAGE: prompt_user('1') for two buttons, otherwise just prompt_user('') for one'''
nota = [NA_PATH,
'-type', WINDOWTYPE,
'-bar_title', BAR_TITLE,
'-title', TITLE,
'-subtitle', SUBTITLE,
'-timeout', TIMEOUT,
'-main_button_label', BUTTON_1,
'-always_on_top']
if two_button <> '':
sec_button = ['-secondary_button_label', BUTTON_2]
temp_list = nota[:len(nota) - 1] + sec_button + nota[len(nota) - 1:]
nota = temp_list
proc = subprocess.Popen(nota, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.communicate()[0]
return proc.returncode
'''### END FUNCTIONS ###'''
if __name__ == "__main__":
# Example 1 button prompt
BUT_RESP = prompt_user('')
print BUT_RESP
# Example 2 button prompt
BUT_RESP = prompt_user('1')
print BUT_RESP
-
Deprecated documentation