Posted on
10-24-2019
07:48 AM
- last edited
3 weeks ago
by
kh-richa_mig
Hello guys,
I am pro with scripts, I want add a restart pop-up if script need to restart machine.
We want to add restart pop-up with these steps;
- Check script's result if there is not security updates to install just quit
- Check script's result if there is install updates and not restart required just send pop up user's screen a message "Some security patches have been installed, not restart reqiured"
- Check script's result if there is install updates and restart required, send a pop up user screen "Some security patches have been installed, please restart computer or machine will force restart after 72 hours". And if user does not restart computer, script force restart computer after 72 hours later.
Is it possible?
Here is script that we use;
#!/bin/bash#####################################
Apple Software Update Search
Version: 2.0
Josh Harvey | Jul 2017
josh[at]macjeezy.com
Updated: Feb 2018
GitHub - github.com/therealmacjeezy
JamfNation - therealmacjeezy
https://github.com/jamf/Jamf-Nation-Scripts/blob/master/Apple_Software_Update_Search_v2.sh
#####################################
####################### Change Log ########################
Version 2.0 Update (Feb 2018)
- Added support for multiple updates to used in the script parameters
(current limit is 4, version 1.0 only supported one item at a time)
- Rewrote the way updates are handled. Now any update that is found gets
added to an array then is downloaded to the default location (/Library/Updates/).
Once the update is finished downloading, it gets added to another array
which is then used to install each update after they all have been downloaded.
- Added a section that will check to see if the update requires a restart.
If it's required, it will set the "restartRequired" variable to yes. Once all
updates have been downloaded and installed, a if statement checks the restart
variable and will trigger a policy setup for an delayed authenticated reboot.
NOTE: A policy will have to be created with a matching trigger in order for this
feature to work. This section currently only looks for the "security" label.
- Added a manual inventory update before the restartRequired check to ensure
any installed updates are succesfully reflected in the Jamf Pro Server. (This
was written in to work around an issue where inventory updates would fail if
the update name exceeded a certain amount of characters.)
##################### USAGE / ISSUES ######################
Enter the item(s) you are trying to update in Parameters 4 through 7.
If you want an authenticated reboot to occur if required by an update
you will need to create a policy with a custom trigger (Set to Ongoing).
If you have any issues or questions please feel free to contact
using the information in the header of this script.
If an item doesn't have any available updates, it will move onto the
next item (if entered). If no updates for any of the items are found
it will exit quietly.
Also, Please give me credit and let me know if you are going to use
this script. I would love to know how it works out and if you find
it helpful.
###########################################################
Script Parameters
Parameter 4 - Update Selection (Required)
Parameter 5 - Update Selection (Optional)
Parameter 6 - Update Selection (Optional)
Parameter 7 - Update Selection (Optional)
Parameter Options
iTunes - iTunes Update
macOS - macOS Software Update (Restart Required)
RDP - Remote Desktop Client Update
Security - Security Update (Restart Required)
App Store - Mac App Store Update (Restart Required)
Safari - Safari Update
formatInput() { # Arrays that contain multiple variations of each item to ensure it gets formatted correctly RemoteDesktop=("rdp" "RDP" "remote desktop" "remote" "Remote" "Remote Desktop") iTunes=("itunes" "Itunes" "iTunes") macOS=("macos" "MacOS" "MACOS" "osx" "OSX") appStore=("app" "appstore" "App Store" "App store" "Appstore") security=("Security" "security" "security update" "Security Update") safari=("safari" "Safari") # Formats the item name if [[ "${iTunes[@]}" =~ "$itemUpdate" ]]; then itemUpdate="iTunes" elif [[ "${macOS[@]}" =~ "$itemUpdate" ]]; then itemUpdate="macOS" elif [[ "${RemoteDesktop[@]}" =~ "$itemUpdate" ]]; then itemUpdate="RemoteDesktop" elif [[ "${appStore[@]}" =~ "$itemUpdate" ]]; then itemUpdate="App Store" elif [[ "${security[@]}" =~ "$itemUpdate" ]]; then itemUpdate="Security" elif [[ "${safari[@]}" =~ "$itemUpdate" ]]; then itemUpdate="Safari" fi }Creates an empty array
updateList=()Checks for input in each of the parameters and formats the string for use in the softwareupdate command
if [[ ! -z "$4" ]]; then itemUpdate="$4" formatInput updateList+=($itemUpdate) else echo "Parameter 4 is missing and is required." exit 0 fiParameter 5 (Optional)
if [[ ! -z "$5" ]]; then itemUpdate="$5" formatInput updateList+=($itemUpdate) else echo "Parameter 5 is empty." fiParameter 6 (Optional)
if [[ ! -z "$6" ]]; then itemUpdate="$6" formatInput updateList+=($itemUpdate) else echo "Parameter 6 is empty." fiParameter 7 (Optional)
if [[ ! -z "$7" ]]; then itemUpdate="$7" formatInput updateList+=($itemUpdate) else echo "Parameter 7 is empty." fiSets the update count variable to zero then looks at the updateList array and checks to see if an update is available and if so downloads the update to /Library/Updates for each item
updateCount="0" for i in "${updateList[@]}"; do echo "Searching for an update for ${updateList[$updateCount]} .." # Variable that searches for available software updates for the item searchUpdate=$(/usr/sbin/softwareupdate -l | grep -w "" | sed 's/^[[:space:]]//' | grep -y "${updateList[$updateCount]}" | sed 's/[]//g' | sed 's/^[[:space:]]//') # Checks to see if there is an update available, if not it will return No Update Found and continue to the next item if [[ -z "$searchUpdate" ]]; then echo "No update found for ${updateList[$updateCount]} .." else echo "Update found for ${updateList[$updateCount]} .. Starting download." installList+=("$searchUpdate") /usr/sbin/softwareupdate -d "$searchUpdate" echo "Download of "${updateList[$updateCount]}" finished" fi let updateCount+=1 doneSets the install count variable to zero then looks at the installList array and runs the softwareupdate command with the install flag for each item in the array
installCount="0" for i in "${installList[@]}"; do echo "Installing the update for "${installList[$installCount]}" ..." /usr/sbin/softwareupdate -i "${installList[$installCount]}" echo "Installation of "${installList[$installCount]}" is complete." let installCount+=1 doneUpdates the inventory to reflect the installed updates
sudo /usr/local/bin/jamf reconLists the updates that were installed
echo "The following updates have been installed:" echo "${installList[@]}"Checks to see if a restart is required
if [[ "${installList[@]}" =~ Security ]]; then echo "A restart is required for this update" restartRequired="yes" else restartRequired="no" fiChecks the restart variable to see if a restart is required and if so runs the trigger for a policy set to perform an authenticated restart
if [[ "$restartRequired" == "yes" ]]; then echo "Restart is Required" # Edit the line below to match the policy in the Jamf Pro server sudo /usr/local/bin/jamf policy -event securityReboot else echo "No Restart Required" fi