Posted on 02-07-2019 02:40 AM
For the new microsoft update 2019 msupdater script I found the following
#!/bin/sh
#
# Microsoft AutoUpdate Helper for Jamf Pro
# Script Version 1.4
#
## Copyright (c) 2018 Microsoft Corp. All rights reserved.
## Scripts are not supported under any Microsoft standard support program or service. The scripts are provided AS IS without warranty of any kind.
## Microsoft disclaims all implied warranties including, without limitation, any implied warranties of merchantability or of fitness for a
## particular purpose. The entire risk arising out of the use or performance of the scripts and documentation remains with you. In no event shall
## Microsoft, its authors, or anyone else involved in the creation, production, or delivery of the scripts be liable for any damages whatsoever
## (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary
## loss) arising out of the use of or inability to use the sample scripts or documentation, even if Microsoft has been advised of the possibility
## of such damages.
## Feedback: pbowden@microsoft.com
# IT Admin constants for which applications to update [set to true or false as required]
UPDATE_WORD="true"
UPDATE_EXCEL="true"
UPDATE_POWERPOINT="true"
UPDATE_OUTLOOK="true"
UPDATE_ONENOTE="true"
UPDATE_SKYPEBUSINESS="true"
UPDATE_REMOTEDESKTOP="true"
UPDATE_COMPANYPORTAL="true"
# IT Admin constants for application target version [set to "latest" to get latest update, or specific build number, such as "15.41.17120500"]
VERSION_WORD="latest"
VERSION_EXCEL="latest"
VERSION_POWERPOINT="latest"
VERSION_OUTLOOK="latest"
VERSION_ONENOTE="latest"
VERSION_SKYPEBUSINESS="latest"
VERSION_REMOTEDESKTOP="latest"
VERSION_COMPANYPORTAL="latest"
# IT Admin constants for application path
PATH_WORD="/Applications/Microsoft Word.app"
PATH_EXCEL="/Applications/Microsoft Excel.app"
PATH_POWERPOINT="/Applications/Microsoft PowerPoint.app"
PATH_OUTLOOK="/Applications/Microsoft Outlook.app"
PATH_ONENOTE="/Applications/Microsoft OneNote.app"
PATH_SKYPEBUSINESS="/Applications/Skype for Business.app"
PATH_REMOTEDESKTOP="/Applications/Microsoft Remote Desktop.app"
PATH_COMPANYPORTAL="/Applications/Company Portal.app"
# Function to enable debug logging
function Debug() {
if [ "$OVERRIDE_DEBUG" == "true" ] || [ "$OVERRIDE_DEBUG" == "TRUE" ] || [ "$OVERRIDE_DEBUG" == "True" ] || [ "$OVERRIDE_DEBUG" == "YES" ] || [ "$OVERRIDE_DEBUG" == "yes" ] || [ "$OVERRIDE_DEBUG" == "Yes" ]; then
LOG=$(date; echo "$1")
echo "$LOG"
fi
}
# Harvest script parameter overrides
OVERRIDE_DEBUG="$4"
OVERRIDE_WORD="$5"
Debug "OVERRIDE_WORD: $5"
OVERRIDE_EXCEL="$6"
Debug "OVERRIDE_EXCEL: $6"
OVERRIDE_POWERPOINT="$7"
Debug "OVERRIDE_POWERPOINT: $7"
OVERRIDE_OUTLOOK="$8"
Debug "OVERRIDE_OUTLOOK: $8"
OVERRIDE_SKYPEBUSINESS="$9"
Debug "OVERRIDE_SKYPEBUSINESS: $9"
OVERRIDE_ONENOTE="${10}"
Debug "OVERRIDE_ONENOTE: ${10}"
OVERRIDE_REMOTEDESKTOP="${11}"
Debug "OVERRIDE_REMOTEDESKTOP: ${11}"
# Function to evaluate app update override
function GetUpdateOverride() {
if [ ! "$1" = "" ]; then
local UPDATE_FIELD1=$(echo "$1" | cut -d '@' -f1)
if [ "$UPDATE_FIELD1" == "TRUE" ] || [ "$UPDATE_FIELD1" == "true" ] || [ "$UPDATE_FIELD1" == "True" ] || [ "$UPDATE_FIELD1" == "YES" ] || [ "$UPDATE_FIELD1" == "yes" ] || [ "$UPDATE_FIELD1" == "Yes" ]; then
echo "true"
elif [ "$UPDATE_FIELD1" == "FALSE" ] || [ "$UPDATE_FIELD1" == "false" ] || [ "$UPDATE_FIELD1" == "False" ] || [ "$UPDATE_FIELD1" == "NO" ] || [ "$UPDATE_FIELD1" == "no" ] || [ "$UPDATE_FIELD1" == "No" ]; then
echo "false"
fi
else
echo "$2"
fi
}
# Function to evaluate app version override
function GetVersionOverride() {
if [ ! "$1" = "" ]; then
local UPDATE_FIELD2=$(echo "$1" | cut -d '@' -f2)
if [ "$UPDATE_FIELD2" == "TRUE" ] || [ "$UPDATE_FIELD2" == "true" ] || [ "$UPDATE_FIELD2" == "True" ] || [ "$UPDATE_FIELD2" == "YES" ] || [ "$UPDATE_FIELD2" == "yes" ] || [ "$UPDATE_FIELD2" == "Yes" ] || [ "$UPDATE_FIELD2" == "FALSE" ] || [ "$UPDATE_FIELD2" == "false" ] || [ "$UPDATE_FIELD2" == "False" ] || [ "$UPDATE_FIELD2" == "NO" ] || [ "$UPDATE_FIELD2" == "no" ] || [ "$UPDATE_FIELD2" == "No" ] ; then
echo "$2"
else
echo "$UPDATE_FIELD2"
fi
else
echo "$2"
fi
}
# Function to parse script parameter overrides
function GetOverrides() {
UPDATE_WORD=$(GetUpdateOverride "$OVERRIDE_WORD" "$UPDATE_WORD")
Debug "Resolved UPDATE_WORD: $UPDATE_WORD"
VERSION_WORD=$(GetVersionOverride "$OVERRIDE_WORD" "$VERSION_WORD")
Debug "Resolved VERSION_WORD: $VERSION_WORD"
UPDATE_EXCEL=$(GetUpdateOverride "$OVERRIDE_EXCEL" "$UPDATE_EXCEL")
Debug "Resolved UPDATE_EXCEL: $UPDATE_EXCEL"
VERSION_EXCEL=$(GetVersionOverride "$OVERRIDE_EXCEL" "$VERSION_EXCEL")
Debug "Resolved VERSION_EXCEL: $VERSION_EXCEL"
UPDATE_POWERPOINT=$(GetUpdateOverride "$OVERRIDE_POWERPOINT" "$UPDATE_POWERPOINT")
Debug "Resolved UPDATE_POWERPOINT: $UPDATE_POWERPOINT"
VERSION_POWERPOINT=$(GetVersionOverride "$OVERRIDE_POWERPOINT" "$VERSION_POWERPOINT")
Debug "Resolved VERSION_POWERPOINT: $VERSION_POWERPOINT"
UPDATE_OUTLOOK=$(GetUpdateOverride "$OVERRIDE_OUTLOOK" "$UPDATE_OUTLOOK")
Debug "Resolved UPDATE_OUTLOOK: $UPDATE_OUTLOOK"
VERSION_OUTLOOK=$(GetVersionOverride "$OVERRIDE_OUTLOOK" "$VERSION_OUTLOOK")
Debug "Resolved VERSION_OUTLOOK: $VERSION_OUTLOOK"
UPDATE_SKYPEBUSINESS=$(GetUpdateOverride "$OVERRIDE_SKYPEBUSINESS" "$UPDATE_SKYPEBUSINESS")
Debug "Resolved UPDATE_SKYPEBUSINESS: $UPDATE_SKYPEBUSINESS"
VERSION_SKYPEBUSINESS=$(GetVersionOverride "$OVERRIDE_SKYPEBUSINESS" "$VERSION_SKYPEBUSINESS")
Debug "Resolved VERSION_SKYPEBUSINESS: $VERSION_SKYPEBUSINESS"
UPDATE_ONENOTE=$(GetUpdateOverride "$OVERRIDE_ONENOTE" "$UPDATE_ONENOTE")
Debug "Resolved UPDATE_ONENOTE: $UPDATE_ONENOTE"
VERSION_ONENOTE=$(GetVersionOverride "$OVERRIDE_ONENOTE" "$VERSION_ONENOTE")
Debug "Resolved VERSION_ONENOTE: $VERSION_ONENOTE"
UPDATE_REMOTEDESKTOP=$(GetUpdateOverride "$OVERRIDE_REMOTEDESKTOP" "$UPDATE_REMOTEDESKTOP")
Debug "Resolved UPDATE_REMOTEDESKTOP: $UPDATE_REMOTEDESKTOP"
VERSION_REMOTEDESKTOP=$(GetVersionOverride "$OVERRIDE_REMOTEDESKTOP" "$VERSION_REMOTEDESKTOP")
Debug "Resolved VERSION_REMOTEDESKTOP: $VERSION_REMOTEDESKTOP"
}
# Function to check whether MAU 3.18 or later command-line updates are available
function CheckMAUInstall() {
if [ ! -e "/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate" ]; then
echo "MAU 3.18 or later is required!"
exit 1
fi
}
# Function to check whether Office apps are installed
function CheckAppInstall() {
if [ ! -e "$PATH_WORD" ]; then
Debug "Word is not installed"
UPDATE_WORD="false"
fi
if [ ! -e "$PATH_EXCEL" ]; then
Debug "Excel is not installed"
UPDATE_EXCEL="false"
fi
if [ ! -e "$PATH_POWERPOINT" ]; then
Debug "PowerPoint is not installed"
UPDATE_POWERPOINT="false"
fi
if [ ! -e "$PATH_OUTLOOK" ]; then
Debug "Outlook is not installed"
UPDATE_OUTLOOK="false"
fi
if [ ! -e "$PATH_ONENOTE" ]; then
Debug "OneNote is not installed"
UPDATE_ONENOTE="false"
fi
if [ ! -e "$PATH_SKYPEBUSINESS" ]; then
Debug "Skype for Business is not installed"
UPDATE_SKYPEBUSINESS="false"
fi
if [ ! -e "$PATH_REMOTEDESKTOP" ]; then
Debug "Remote Desktop is not installed"
UPDATE_REMOTEDESKTOP="false"
fi
if [ ! -e "$PATH_COMPANYPORTAL" ]; then
Debug "Company Portal is not installed"
UPDATE_COMPANYPORTAL="false"
fi
}
# Function to determine the logged-in state of the Mac
function DetermineLoginState() {
# The following line is courtesy of @macmule - https://macmule.com/2014/11/19/how-to-get-the-currently-logged-in-user-in-a-more-apple-approved-way/
CONSOLE=$(/usr/bin/python -c 'from SystemConfiguration import SCDynamicStoreCopyConsoleUser; import sys; username = (SCDynamicStoreCopyConsoleUser(None, None, None) or [None])[0]; username = [username,""][username in [u"loginwindow", None, u""]]; sys.stdout.write(username + "
");')
if [ "$CONSOLE" == "" ]; then
echo "No user logged in"
CMD_PREFIX=""
else
echo "User $CONSOLE is logged in"
CMD_PREFIX="sudo -u $CONSOLE "
fi
Debug "Resolved CMD_PREFIX: $CMD_PREFIX"
}
# Function to set target version for app
function SetTargetVersion() {
if [ "$1" == "LATEST" ] || [ "$1" == "latest" ] || [ "$1" == "" ]; then
TARGET_VERSION=""
else
TARGET_VERSION="--version ${1}"
fi
Debug "Final TARGET_VERSION: $TARGET_VERSION"
}
# Function to register an application with MAU
function RegisterApp() {
Debug "RegisterApp: Params - $1 $2"
$(${CMD_PREFIX}defaults write com.microsoft.autoupdate2 Applications -dict-add "$1" "{ 'Application ID' = '$2'; LCID = 1033 ; }")
}
# Function to call 'msupdate' and update the target application
function PerformUpdate() {
Debug "PerformUpdate: ${CMD_PREFIX}/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate --install --apps $1 $2 --wait 600 2>/dev/null"
${CMD_PREFIX}/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate --install --apps $1 $2 --wait 600 2>/dev/null
}
## MAIN
CheckMAUInstall
GetOverrides
CheckAppInstall
DetermineLoginState
if [ "$UPDATE_WORD" == "true" ]; then
Debug "Going for Word update"
RegisterApp "$PATH_WORD" "MSWD2019"
SetTargetVersion "$VERSION_WORD"
PerformUpdate "MSWD2019" "$TARGET_VERSION"
else
Debug "Update for Word disabled"
fi
if [ "$UPDATE_EXCEL" == "true" ]; then
Debug "Going for Excel update"
RegisterApp "$PATH_EXCEL" "XCEL2019"
SetTargetVersion "$VERSION_EXCEL"
PerformUpdate "XCEL2019" "$TARGET_VERSION"
else
Debug "Update for Excel disabled"
fi
if [ "$UPDATE_POWERPOINT" == "true" ]; then
Debug "Going for PowerPoint update"
RegisterApp "$PATH_POWERPOINT" "PPT32019"
SetTargetVersion "$VERSION_POWERPOINT"
PerformUpdate "PPT32019" "$TARGET_VERSION"
else
Debug "Update for PowerPoint disabled"
fi
if [ "$UPDATE_OUTLOOK" == "true" ]; then
Debug "Going for Outlook update"
RegisterApp "$PATH_OUTLOOK" "OPIM2019"
SetTargetVersion "$VERSION_OUTLOOK"
PerformUpdate "OPIM2019" "$TARGET_VERSION"
else
Debug "Update for Outlook disabled"
fi
if [ "$UPDATE_ONENOTE" == "true" ]; then
Debug "Going for OneNote update"
RegisterApp "$PATH_ONENOTE" "ONMC2019"
SetTargetVersion "$VERSION_ONENOTE"
PerformUpdate "ONMC2019" "$TARGET_VERSION"
else
Debug "Update for OneNote disabled"
fi
if [ "$UPDATE_SKYPEBUSINESS" == "true" ]; then
Debug "Going for SfB update"
RegisterApp "$PATH_SKYPEBUSINESS" "MSFB16"
SetTargetVersion "$VERSION_SKYPEBUSINESS"
PerformUpdate "MSFB16" "$TARGET_VERSION"
else
Debug "Update for SfB disabled"
fi
if [ "$UPDATE_REMOTEDESKTOP" == "true" ]; then
Debug "Going for Remote Desktop update"
RegisterApp "$PATH_REMOTEDESKTOP" "MSRD10"
SetTargetVersion "$VERSION_REMOTEDESKTOP"
PerformUpdate "MSRD10" "$TARGET_VERSION"
else
Debug "Update for Remote Desktop disabled"
fi
if [ "$UPDATE_COMPANYPORTAL" == "true" ]; then
Debug "Going for Company Portal update"
RegisterApp "$PATH_COMPANYPORTAL" "IMCP01"
SetTargetVersion "$VERSION_COMPANYPORTAL"
PerformUpdate "IMCP01" "$TARGET_VERSION"
else
Debug "Update for Company Portal disabled"
fi
exit 0
IN the script I am first installing Mau 4.7 and then afterwards the script above run. But it fails with error code
```
Script exit code: 1
Script result: MAU 3.18 or later is required!
```
I checked microsoft autoupdate on the computer and it is running 4.7 ? - office version is 15.39
Anyone has similiar problems ?
Posted on 02-19-2019 07:49 AM
You'll need to update the following sections with the correct path of msupdate for the new v4.x MAU. I don't know what they are, but I'm sure you can find them:) Also, it's not possible to predetermine if the commands used will work with the new version of msupdate:) Only one way to find out!
# Function to check whether MAU 3.18 or later command-line updates are available function CheckMAUInstall() { if [ ! -e "/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate" ]; then echo "MAU 3.18 or later is required!" exit 1 fi }
# Function to call 'msupdate' and update the target application function PerformUpdate() { Debug "PerformUpdate: ${CMD_PREFIX}/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate --install --apps $1 $2 --wait 600 2>/dev/null" ${CMD_PREFIX}/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate --install --apps $1 $2 --wait 600 2>/dev/null }
Posted on 02-19-2019 06:15 PM
I'm having similar problems in our environment where MAU 4.8 is erroring with the version of the script displayed above. The path hasn't changed, in fact the script is written by a senior MS engineer so he should know (I've also copied it out and executed it in my own terminal and it's fine). The author has confirmed a new version will be released shortly so unless a simple fix is released, I'm just waiting to try the new one.
PS my error is an abort in this section at the last line:
function PerformUpdate() { Debug "PerformUpdate: ${CMD_PREFIX}/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate --install --apps $1 $2 --wait 600 2>/dev/null" ${CMD_PREFIX}/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate --install --apps $1 $2 --wait 600 2>/dev/null
The CMD_PREFIX is about establishing the logged in user state which logging indicates it is doing successfully, and the app location specified is also correct, so I guess it's another piece of logic that I can't decipher.