Posted on 10-24-2024 10:04 AM
Hi there,
I am trying to use Swiftdialog prompts for installing application with deferrals
I have the following code which exits out with error code 1 when deployed by jamf , but the same code exit without any issues in vscode
So i basically use this part of the code to exit
log_message()
{
echo "$(date): $@"
}
cleanup_and_exit()
{
# If you have temp folders/files that you want to delete as this script exits, this is the place to add that
log_message "${2}"
exit "${1}"
}
Write_To_Config()
{
log_message "Writing to Plist"
$pBuddy -c "Set :CurrentDeferralTime $currentDeferralTime" "$deferralPlist"
$pBuddy -c "Set :TotalDeferralTime $TotalDeferralTime" "$deferralPlist"
# $pBuddy -c "Set :TotalDeferralTimeEpoch $TotalDeferralTimeEpoch" "$deferralPlist"
$pBuddy -c "Set :CurrentDeferralTimeEpoch $deferralDateSeconds" "$deferralPlist"
$pBuddy -c "Set :AllowedDeferralTime $AllowedDeferralTime" "$deferralPlist"
$pBuddy -c "Add :HumanReadableDeferralDate string $deferralDateReadable" "$deferralPlist" > /dev/null 2>&1
cleanup_and_exit 1 "Set deferral, Exiting."
}
#####################SCRIPT#########################################
verify_config_file
check_for_deadline
check_for_active_deferral
currentDeferralTime=$(prompt_with_deferral)
# if the user presses ok i am ready
if [[ -z "$currentDeferralTime" ]]; then
install_application
fi
#if the user presses deferral without any option , set it to defer by 1 hour
if [[ "$currentDeferralTime" == 0 ]];then
echo "Setting deferral value to 1 hour"
currentDeferralTime=3600
fi
deferralDateSeconds=$((unixEpochTime + currentDeferralTime ))
deferralDateReadable=$(date -j -f %s $deferralDateSeconds)
if [[ "$($pBuddy -c "Print :TotalDeferralTime" "$deferralPlist")" == 0 ]]; then
TotalDeferralTime=$currentDeferralTime
else
TotalDeferralTime=$(( $( $pBuddy -c "Print :TotalDeferralTime" "$deferralPlist" ) + currentDeferralTime ))
fi
Write_To_Config
First screenshot is the output from VScode
Second and third are from Jamf
I use the exact same code in VScode and JAMF , the script does everything as intended. But i see the exit status as failed in jamf and with error code 1.
Can anyone advise why is this happening and i get failed exit status in Jamf even tho the script work as intended?
Posted on 10-24-2024 10:10 AM
Your script is missing the shebang. You need to have #!/bin/bash (or another interpreter like zsh or python3) as the first line of a script.
Also try to run the script using terminal, save it somewhere and the command is sudo sh {path to file}.
Posted on 10-24-2024 10:18 AM
Oh sorry i do use shebang , i only copied portion of script which is relevant to exit , entire script is 250 lines long.
I tried executing through terminal it works fine without any failed exit status.
even pushing through jamf , script works as expected but i just see failed status when i check the log, I am trying to understand why it show failed status and fix that.
Posted on 10-24-2024 10:27 AM
What is the shebang you are using? Jamf can be a bit temperamental with some interpreters, I usually just stick to bash as stuff that works locally with others like zsh sometimes has issues with Jamf.
Posted on 10-24-2024 10:33 AM
When executing a script in Visual Studio Code, it runs in the user’s space. Conversely, when executing a script via JAMF, it runs in the root space.
Please verify if any functions require execution in the user’s space. If so, use the appropriate method for execution.
https://scriptingosx.com/2020/08/running-a-command-as-another-user/
# convenience function to run a command as the current user
# usage:
# runAsUser command arguments...
runAsUser() {
if [ "$currentUser" != "loginwindow" ]; then
launchctl asuser "$uid" sudo -u "$currentUser" "$@"
else
echo "no user logged in"
# uncomment the exit command
# to make the function exit with an error when no user is logged in
# exit 1
fi
}
Posted on 10-24-2024 12:28 PM
I don't believe it's related to user space, but that's a good post to bookmark anyway.
Your Write_To_Config function is simply causing the exit code 1 because of the line
cleanup_and_exit 1 "Set deferral, Exiting."
So you'll need to decide when do you need to exit with an error and when do you not, and adjust your use of cleanup_and_exit.
Posted on 10-25-2024 02:09 PM
CodeRunner is a great app to use to test your scripts.