Keep MacOS on latest Version

Andixon
Contributor

How do you all keep your Mac Clients on the latest MacOS Version? Is there a way to force an Upgrade? Because the "new" Software Updates Option doesnt do anything for us. When we try to trigger updates on the Clients nothing happens. 

1 ACCEPTED SOLUTION

jamf-42
Valued Contributor III

read / test / deploy https://github.com/macadmins/nudge

its pretty simple.. deploy the pkg.. setup the config profile (less is more) and job done.. 

View solution in original post

8 REPLIES 8

_Daley
New Contributor III

For us, the scheduled install option has the highest success rate for updating devices. We also have a "nudge" like notification for users who fall through the cracks of the mechanism. 

You mean the scheduled install Version within the Software Updates function? That is unfortunately unavailable to us, as we have a on premise installation. 

How do you do the "nudge" notification for your users?

jamf-42
Valued Contributor III

read / test / deploy https://github.com/macadmins/nudge

its pretty simple.. deploy the pkg.. setup the config profile (less is more) and job done.. 

This seems to me like the best solution for my use case. I will try it. Thank you!

Shyamsundar
Contributor III

you can also try using https://github.com/Macjutsu/super

easyedc
Valued Contributor II

I do my best to avoid installing additional software to complete tasks, so if I can rely on native tools and the Jamf binaries, I will.  I have as script that performs Nudge-like functions without installing tools. The script does require some updates occasionally as Apple releases new OS's.

#!/bin/bash

#  Update Notification.sh
#  
#
#  Created by Ed C on 11/22/22.
#  Edited to correct the date variable (line 11).
#  Edited to add new OS names - 6.18.2024
#  Edited to correct path for Software Updates prefs pane - 12.10.2024
#
# Get Version of macOS

date=$4

version=$(sw_vers -productVersion)

getversion=$(
if [[ $version == 15.* ]]; then
echo "macOS Sequoia"
fi

if [[ $version == 14.* ]]; then
echo "macOS Sonoma"
fi

if [[ $version == 13.* ]]; then
echo "macOS Ventura"
fi

if [[ $version == 12.* ]]; then
echo "macOS Monterey"
fi
)

updates=$(/usr/libexec/PlistBuddy -c "Print :RecommendedUpdates" /Library/Preferences/com.apple.SoftwareUpdate.plist | grep "Display Name" | sed 's/Display Name = //' | awk '{$1=$1};1')

/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType hud -lockHUD -title "Corporate Workstation Software Update Needed" -alignDescription justified -description "Your computer requires an update to the Operating System - $getversion.

Please update your workstation at your earliest convenience to prevent an unplanned forced restart. The following updates are available:
$updates

Forced updates are scheduled to begin $4.

Thank you for your prompt attention and cooperation in keeping Corporate workstations safe and functioning efficiently!" -icon "/Applications/Utilities/path/to/corp/logo.png" -button1 "Update" -timeout 900 -countdown

## Previously used this command
# /usr/bin/open /System/Library/PreferencePanes/SoftwareUpdate.prefPane
## But updated to this to reflect changes in macOS
/usr/bin/open "x-apple.systempreferences:com.apple.preferences.softwareupdate?client=softwareupdateapp"

exit 0

$4 is a customizable date that you can drop into the message with a "due date" for your associates before you send the push out to attempt force updating.  I find this to be fairly successful.  During build we deploy a folder full of corporate icons and I just call one to display in the message so that it looks more official.

BGhilardi
New Contributor III

Personally, I use SUPER, which allows for quite a few notification settings.

Andixon
Contributor

Thank you all for your responses!