Managed Software Updates - using deferrals via a mass action

eric_skinner
New Contributor III
New Contributor III

Hi all,

Wanted to share that we are actively developing to implement deferrals in an upcoming beta release of Jamf Pro, targeting between Q4 of 2021 and Q1 of 2022 to solve for the below use case.

As a Jamf Admin, I want to issue a remote command for my macOS devices to update their OS, while also giving them the option to defer the OS update so that their critical workflows aren’t interrupted (ex. during a presentation), while also ensuring they stay up to date

Example mass action/remote command workflows moving forward:

  • (Existing) Admins can issue a remote command to a set of devices to download and install to an upgraded version of macOS ASAP, restarting end-user machines as necessary
  • (Existing) Admins can issue a remote command to a set of devices to download to an upgraded version of macOS and notify the end user
  • (Upcoming, net new) Admins can issue a remote command to a set of devices to download to an upgraded version of macOS and notify the end user, and input a MaxUserDeferrals integer between 1-90, which will allow the end users to snooze a software between 1-90 days
  • Potential future functionality:
    • Ability to issue these commands via API
    • Ability to schedule these commands
    • Ability to issue these commands via policy

We are actively developing this and will be able to communicate a timeline once we are able to determine which Beta release it is planned for.

Please feel free to offer up and questions, comments, or feedback here, thanks!

Eric Skinner

Jamf Pro Product Owner

38 REPLIES 38

stephenb
New Contributor III

Definitely like the sound of issuing these via a policy! Looking forward to this!

dtommey
New Contributor III

The ability to schedule MDM commands would be extremely useful. Not only for the new software deferral MDM commands but also the existing remote lock/wipe commands. https://ideas.jamf.com/ideas/JN-I-15577

vinny83
New Contributor III

Yup, agree with the others. Really looking forward to this!!

AJPinto
Honored Contributor II

Where yes deferrals are important I am mainly concerned about actually being able to force OS updates. installASAP is great an all when nothing suppresses reboots. MaxUserDeferrals automatically switches to InstallForceRestart once the deferrals are exceeded if I understand this correctly. So if MaxUserDeferrals works as expected we may finally have a way to force OS updates. ReallyInstallForceRestart should have been added when macOS added support for it and let us admins decide if the data lost risk was worth it to use, JAMF should not have made this decision for us.

 

Either way this is good news to be sure. Not being able to manage OS updates is now really the only remaining issue preventing us from deploying Apple Silicon macs. At least we have a roadmap for this now.

eric_skinner
New Contributor III
New Contributor III

Hey @AJPinto,

Depending on what you're looking for, there is some level of functionality around the installForceRestart today (see `Download and Install the update, and restart computers after installation').

You might already be aware of this, and I recognize it's totally possible there are nuances or limitations that do not work with your workflows that I'd love to hear about: though I'll err on the side of over-communication:

https://docs.jamf.com/best-practice-workflows/jamf-pro/managing-macos-updates/Updating_macOS_Using_a...

If you have additional questions or clarifications, reach out to Jamf support https://www.jamf.com/support/jamf-pro

Thanks,
Eric

j_meister
Contributor II

Eric, we are really looking forward to this! 👍

We are still missing a convenient and working way to force macOS updates. With macOS 10.11 (!) Apple introduced InstallLater and InstallForceRestart which we are waiting for so long now. We hope these two options get implemented in one of the next Jamf Pro releases.

About 80 % to 90 % of our users do updates / upgrades but some don't and forcing it makes it way easier.

Hey @j_meister,

Echoing what I shared with a different reply:

Depending on what you're looking for, there is some level of functionality around the installForceRestart today (see `Download and Install the update, and restart computers after installation').

You might already be aware of this, and I recognize it's totally possible there are nuances or limitations that do not work with your workflows that I'd love to hear about: though I'll err on the side of over-communication:

https://docs.jamf.com/best-practice-workflows/jamf-pro/managing-macos-updates/Updating_macOS_Using_a...

If you have additional questions or clarifications, reach out to Jamf support https://www.jamf.com/support/jamf-pro

Thanks,
Eric

AJPinto
Honored Contributor II

Unfortunately even this work flow is not very reliable. Macs wont download the updates if they dont have enough disk space, you get no confirmation on this one way or the other. 

 

I am not sure if external reboots will cause OS updates to install if they are downloaded. I think the function of downloading updates is to allow the users to install, or to use the installASAP command down the road. With installASAP if anything prevents a reboot (like terminal pinging something) the command just fails. There is no way to use installASAP to FORCE updates, if the Mac cannot gracefully shutdown installASAP simply will not install updates. Again you get no notification or logging.

 

JAMF is not using the MDM command that lets you see the status of OS updates. For example there is a MDM command that returns if updates are downloading, cached, pending install, ext. I forget the MDM commands key at the moment and I am on my ipad right now :(.

 

I suppose to be simple. We should not be having to dance around JAMFs limited support of Apple MDM commands to manage updates. Which are between 1-5 years old at this point depending on the command.

 

We certainly appear to be on the right path now thankfully.

j_meister
Contributor II

Hey @eric_skinner ,

thanks for your reply. The "Download and install the update, and restart computers after installation" feature works in most cases, that's right. I would just wish to have a feature to enforce the updates on the rest of the machines and hope/think InstallForceRestart should achieve this.

Thanks again,

Johann

Daemonomicon
New Contributor

Will the MaxUserDeferrals option only be available on MacOS Monterey? Or is this something that can be implemented with Big Sur as well?

Hey @Daemonomicon,

MaxUserDeferrals is a parameter that Apple has for Monterey and forward, so it is not available for Big Sur.

eric_skinner
New Contributor III
New Contributor III

Hi All,

Trying to be transparent as we can: Apple has informed us that this might not actually be deferral days  as much as it will be deferral instances. A deferral instance being defined as a user clicking out of the update (e.g. install later, not now, etc.)

We'll still be able to send the command with a deferral integer (e.g. end users can defer 7 times). That said, after the command is issued and the deferral set, Apple manages all of those communications and notifications to the end user. We're seeking some clarification, though it appears that it may rely on the end user clicking to defer, rather than days.

Eric Skinner
Jamf Pro Product Owner

Hi Eric,

thank you for this information.

Johann

bbarciz
Contributor

@eric_skinner  thanks for sharing this update with us!  It sounds like it is certainly a step in the right directions for us to admin our Mac machines and keep them patched.

My main priority in my job is Windows machines, and for that we use SCCM currently.  I'm not sure if you have any experience or knowledge, but it would be helpful to have some controls like it offers on the Macs through Jamf as well.  For example, It would be great to say "start installing this OS upgrade at 11:00pm tonight (after classes end) and if the machines needs to restart, do the restart automatically between now and 6:00am."  However, if the update gets to the point of needing a restart after 6:00am, notifiy the user that a restart is required in the next x numbers of hours.  We normally allow our users to defer it through the next work day and then require it to happen after.

 

Also, the ability to schedule updates to happen at a certain time would be very helpful.  For example, I want to configure the updates during my normal 8-5 type day, but not have them run until overnight in our "maintenance window" as SCCM refers to it.  Will these changes only effect some/newer OS versions?  We currently have many different OS instances and I am starting from the ground up with how to address updates for them.

 

Hopefully future updates on this will be posted soon.  Looking forward to it!

Thanks!

RobertHammen
Valued Contributor II

@eric_skinner While we're at it, can we get an "Update OS" Management command buttos (for a single device, obviously) in the Management tab for both iOS and macOS? 

That would be awesome, I miss such a button often.

forrestbeck
New Contributor III

Looking forward to seeing this added soon!

cnelson
Contributor

Very interested in this. I'm excited about the possibility of the max deferrals being a reality on Mass Action, API, and policies. Having lots of headaches with our updates here.

AJPinto
Honored Contributor II

We finally got user deferral with 10.35 via mass action. Is there any word on when we can get a policy to wrap this in?

Is there any discussion in adding these newer keys to the inventory record? It seems kinda strange that i have to do mass action if I need to update a one off device. Logging is also horrible for these MDM commands right now.

bwoods
Valued Contributor

@eric_skinner  I have a simple API command that will run the download and install management command, but it seems to take the computer anywhere between 20 minutes to an hour to actually update. Do you have any suggestions to improve this workflow? Would the "installForceRestart" action work better. I'm using this with a user interaction policy to deploy updates.

 

apiUsername="apiaccount"
apiPassword="apipassword"
jamfProURL="https://yourorg.jamfcloud.com"
macSerial=$(system_profiler SPHardwareDataType | awk '/Serial Number/{print $4}')
jamfProCompID=$(curl -s -u $apiUsername:$apiPassword -H "Accept: text/xml" "$jamfProURL"/JSSResource/computers/serialnumber/"$macSerial" | xmllint --xpath '/computer/general/id/text()' -)


/usr/bin/curl -s -X POST -H "Content-Type: text/xml" -u ${apiUsername}:${apiPassword} ${jamfProURL}/JSSResource/computercommands/command/ScheduleOSUpdate/action/install/id/${jamfProCompID}
 

 

eric_skinner
New Contributor III
New Contributor III

Hi @bwoods

Nothing jumps out on the script or Jamf side of things you could do differently. That does seem in the acceptable range of time we experienced with testing as well.

For additional context, Jamf issues the command to begin the update process, though after issuing the command and it as been received, Apple handles the update, installation, and updating process -- so we're fairly removed from that point on.

Certainly if an updated command failed for some reason, you could re-issue it, though that's the extent to what Jamf can help with.

bwoods
Valued Contributor

No problem. Thanks for the info. 

Mountain20
New Contributor II

Does it help if this is upvoted here https://ideas.jamf.com/ideas/JN-I-15577 ?

We're going on almost an entire year since InstallLater and MaxUserDeferrals key was announced at WWDC21.

Daemonomicon
New Contributor

Do we have a timeline on this? Q1 of 2022 is about to end and this thread has been fairly quiet. 

eric_skinner
New Contributor III
New Contributor III

Hi @Daemonomicon, @Mountain20, and others,

Absolutely; we were able to deliver deferral functionality in 10.35.0
(see release notes section titled, "User Deferrals for macOS Software Updates")
https://docs.jamf.com/10.35.0/jamf-pro/release-notes/New_Features_and_Enhancements.html 

We also addeed some endpoints in 10.36.0
(See release notes section titled, "Jamf Pro API Changes and Enhancements")
https://docs.jamf.com/10.36.0/jamf-pro/release-notes/New_Features_and_Enhancements.html

Further, we've added additional API enhancements in 10.37.
(See release notes sections titled "Manage macOS Software Updates via the Jamf Pro API" and "Jamf Pro API Changes and Enhancements")
https://docs.jamf.com/10.37.0/jamf-pro/release-notes/New_Features_and_Enhancements.html

To the questions around scheduling remote commands, yes this idea link is a good place to include votes, commentary, and feedback around scheduling managed software commands. 
https://ideas.jamf.com/ideas/JN-I-15577


Thanks,

Eric Skinner

Just coming back here a year later to say this was helpful and thank you! Happy new year.

stutz
Contributor

How will this new feature fix the popup window a user sees that requires them to enter an administrator username/password to reboot the machine when this remote command is used?  If that isn't resolved not sure how useful policy integration with remote commands to upgrade machines is going to be.

eric_skinner
New Contributor III
New Contributor III

Hi @stutz,

If a bootstrap token is properly escrowed for devices requesting an upgrade, the command should succeed without the need for username/password.

Here's some more information on BSTs. If you're still encountering the issue, it may be worth opening up a support ticket to dig deeper.
https://docs.jamf.com/technical-articles/Manually_Leveraging_Apples_Bootstrap_Token_Functionality.ht...

Eric Skinner

Yes the bootstrap token is properly escrowed and still get prompted for each of the 3 update options:

Download the update for users to install
Download and allow macOS to install later
Download and install the update, and restart computers after installation

RobertPetrie
New Contributor II

I'm testing some API workflows at the moment and i have one for triggering the EraseDevice MDM command to rebuild a Mac quickly:

 

#!/bin/bash

########################################################################################################
# SET SCRIPT VARIABLES

#Set the JamfURL variable to your Jamf server URL
JamfURL=$(echo "mycompany.jamfcloud.com")

# Decode the base64 hash of the API username stored in $4 in the Jamf script
$APIusername=$(echo "$4" | base64 -D)

# Decode the base64 hash of the $APIusername password stored in $5 in the Jamf script
$PASSWORD=$(echo "$5" | base64 -D)

# Get computer serial number.
SerialNumber=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}')
echo "Serial Number = $SerialNumber"

#Get Computer ID from Jamf.
ComputerID=$(curl -u $APIusername:$PASSWORD https://$JamfURL/JSSResource/computers/serialnumber/$SerialNumber/subset/general -sk -H "accept: text/xml" | xmllint --xpath "/computer/general/id/text()" -)
echo "Computer ID = $ComputerID"

########################################################################################################
# USE THE JAMF API TO SEND MDM COMMANDS to $ComputerID 


# Push EraseDevice command to Computer ID with passcode 123456 
/usr/bin/curl --silent --show-error --connect-timeout 30 --request POST --user $APIusername:$PASSWORD "https://$JamfURL/JSSResource/computercommands/command/EraseDevice/passcode/123456/id/$ComputerID"

 

 

Does anyone know if there is an MDM command that will perform a major software update like Big Sur to Monterey? Or do all of the software update MDM commands listed here (https://support.apple.com/en-gb/guide/deployment/depc4c80847a/web) only apply to minor software and security updates?

 

I haven't come across a Jamf API / MDM command way to do OS Upgrades yet but if anyone has any ideas that'd be great. The only possible scenario i can think of is using the API to do the following:

- Grab the computer name

- Create a static group with the computer name

- Do a mass action on the static group to upgrade the OS

- Delete the static group

 

I'll try and get this working in the mean time. Surely it should be simpler than this though. :)

 

bwoods
Valued Contributor

My script should be able to upgrade a machine from BS to Monterey.

Force a Computer Restart to Install macOS Updates - Jamf Nation Community - 265982

RobertPetrie
New Contributor II

Thanks for that, that was really helpful. It turns out my Apple Silicon device doesn't actually support Big Sur so i can't test the major version upgrade but when the next version of macOS comes out in Apple Seed i'll be able to confirm that it works. At the moment i have it working with interim updates/security patches so it should work in exactly that same way with the new OS. :) 

brunerd
Contributor

FYI...

Earlier in the thread it was said:

Trying to be transparent as we can: Apple has informed us that this might not actually be deferral days  as much as it will be deferral instances. A deferral instance being defined as a user clicking out of the update (e.g. install later, not now, etc.)


Well amazingly Apple documented this here (and it is for macOS 12 only)

 
MaxUserDeferrals - integer

The maximum number of times the system allows the user to postpone an update before it’s installed. The system prompts the user once a day.


I was wondering about the "devil in the details" on this one too! 👹

 

rweinstock
New Contributor

Hello, I am using the remote command (Update OS version and built-in apps) with the deferral option of 1 day, but unfortunately it's been several days and my test computer still will not update from macOS 13.0.1 to 13.1 as expected.

Every day, the system update notification does appear and I just click the X at the top left to dismiss it (as a typical user would do) hoping that eventually the update would install anyway. Meanwhile, it's been about 3-4 days and still nothing. I only sent the remote command once.

I do have a number of apps open and I did see one message saying that Microsoft Excel prevented the system from restarting (or something similar), but that was yesterday and today nothing at all.

I'm wondering what is the best and most reliable way to get these minor macOS updates installed.

xian
New Contributor II

I had been getting 7109 errors indicating a duplicate command (even after clearing out all pending and failed commands beforehand).  I was told by an Apple engineer that this was a known issue that was fixed in 13.3.  I didn't see any reference to it in the release notes, but when attempting to update with three deferrals from 13.3 to 13.3.1, I’m seeing this strange entry which seems to indicate that the device considers 13.3 to be a newer version of macOS than 13.3.1:

2023-04-13 10:56:09-07 523QV045 SoftwareUpdateNotificationManager[1492]: Controller: Ignoring the latest MajorOSProduct:032-66588 because it's major/minor version:13.3.1 is not newer than your current major/minor version:13.3

On this device, OSUpdateStatus completes, ScheduleOSUpdate completes, AvailableOSUpdates completes, ScheduleOSUpdateScan completes, but OSUpdateStatus – Scheduled will permanently remain in pending without ever executing.

xian
New Contributor II

Got an explanation of the above: the Mac discovered a full installer for a major upgrade, but because the major version matches the existing major version installed, there is no need to automatically download a Full Installer for the macOS major version it already has.

AJPinto
Honored Contributor II

Just necroing a dead thread. We are on JAMF 10.45 now, and still no word on being able to schedule macOS updates or issue them with a policy. 

  • Potential future functionality:
    • Ability to issue these commands via API
    • Ability to schedule these commands
    • Ability to issue these commands via policy


 

There have been lots of changes, and additions to JAMFs abilities, and still a few glaring gaps in the past 1.5 years. JAMF really needs to issue a new community post as to where they are with managing OS updates on macOS. 

jamf-42
Valued Contributor

bump.. can OP update please