Category filter

Script to Update and Upgrade OS in macOS devices

Apple releases OS updates periodically to fix bugs or strengthen the security of the released versions of the OS. Organizations prefer their devices to have the latest available OS. However, deploying OS updates can be a cumbersome task for the IT department of any organization because of the sheer number of devices. Hexnode provides three methods to update macOS devices; Update OS action, OS update via policies and by deploying scripts. This document contains the code snippet required to update and upgrade macOS devices.


The sample scripts provided below are adapted from third-party open-source sites.

Script to Update OS

To simply list available updates for the current OS version of your device, use the command-

To install all available updates listed with the above command and restart the system to complete installation, use the following command

To avoid running two commands separately, you can use a combination of these commands.

The above code uses a combination of commands and tools to update the OS to the latest version of macOS Big Sur available.

softwareupdate –l command is used to fetch the list of all available software updates.

grep “Big Sur” scans the list for available versions of macOS Big Sur. You may replace “Big Sur” in the above code with an OS version name suitable for your use case.

awk NR==1 filters the updated list to the latest version (row number 1).

cut –d ‘ ‘ -f 3- further processes the output to contain only the OS name identifier.

Finally, we pass the OS name identifier as an argument $getosupd with the softwareupdate command to install the specified OS version. The -i command installs the OS and the -R command can be added to automatically restart the system when the OS installation is complete.

Script to Upgrade OS

Here, <OS Version> is to be replaced with the required OS version, i.e., the version to which the OS should be updated. Likewise, <Username> and <Password> are to be replaced with the username and password of the admin, respectively.

This script receives the required OS version as input, installs the corresponding version’s installer app and initiates the update installation. For example, if the admin enters 12. 1 as the required OS version, the macOS Monterey installer app will be installed, and once the admin credentials are given, the update will begin to install.

Here is an alternative step-by-step guidance to upgrade the OS:

To list all available OS versions for installation, use the following command –

The --list-full-installers command lists all available macOS installers. This command may not work as intended on versions of macOS older than Catalina.

You could also just run the command to list all installers and check if installers are available for the latest OS version for your device.

Fetch the installer app to your device using the command:

Using this command, you can fetch a specific OS version of the installer app from the list that had been displayed earlier, for instance, version 12.1:

After running the command, the corresponding installer app should be available in your Applications folder. Here, since version 12.1 was chosen, Install macOS will be present.
Get the installer app from the App Store

If the OS installer app is available in the Application folder of your device, you can initiate installation using the command

The update will be installed without any interaction from the user and the system will be rebooted.

If your device has the new M1 chip, starttoinstall requires the admin username and password to initiate installation.

--user – admin user to authorize installation

--stdin – to pass the password without interaction

Pass the device admin credentials to the device by replacing <adminuser> and <Password> with the admin’s username and password respectively, and execute the upgrade action without any user interaction.


  • Ensure your device is plugged in and has sufficient space to download updates before initiating OS update.
  • Ensure your device is eligible for updates.
  • Scripts may be in ‘Initiated’ status for an extended period of time depending on network connectivity as a large number of updates are downloaded.
  • It is recommended to manually validate the script execution on a system before executing the action in bulk.
  • Hexnode will not be responsible for any damage/loss to the system on the behavior of the script.

  • Sample Script Repository