Skip to content
The Lazy Administrator
  • Home
  • Disclaimer
  • Contact
  • About Me
  • Search Icon

The Lazy Administrator

Finding ways to do the most work with the least effort possible

Remotely Install Office ProPlus / Update Office Configuration on Client Computers with PowerShell

Remotely Install Office ProPlus / Update Office Configuration on Client Computers with PowerShell

March 20, 2018 Brad Wyatt Comments 2 comments

There are some immediate perks for using PowerShell to either install an application on remote computers or update an applications configuration remotely. In this post I will do several things, Install Office 365 ProPlus to a remote computer, and update the configuration of Office 365 ProPlus on the remote machine, having it go from the Monthly channel to the Semi-Annual channel and also removing groove.exe and lync.exe (Skype for Business).

When updating the configuration the install is silent and the EULA is accepted by setting <Display Level=“None” AcceptEULA=“TRUE”/>.  When you set FORCEAPPSHUTDOWN to false, Office applications can be used during the upgrade but its recommended to restart the client workstation at the end of the install. I have also seen it not able to update if certain office applications are running. It’s recommended to set FORCEAPPSHUTDOWN to TRUE to close the office applications while they update.

To get the configuration.xml document and setup.exe you will need to download the Office Deployment Tool which can be downloaded  from here and here. Store both these files in a spot you can call later. For me I placed them at C:\Transfer

To make my configuration.xml file I created the XML using the site here.

In the end my configuration.xml file looked like the following:

<Configuration>
    <Add OfficeClientEdition="32" Channel="Monthly">
        <Product ID="O365ProPlusRetail">
            <Language ID="en-us"/>
            <ExcludeApp ID="Lync"/>
            <ExcludeApp ID="Groove"/>
        </Product>
    </Add>
    <Updates Enabled="TRUE" Channel="Monthly"/>
    <Display Level="None" AcceptEULA="TRUE"/>
    <Property Name="FORCEAPPSHUTDOWN" Value="TRUE"/>
    <Property Name="SharedComputerLicensing" Value="0"/>
    <Property Name="PinIconsToTaskbar" Value="TRUE"/>
</Configuration>

When I ran this remotely it seemed that client computers did not properly update unless FORCEAPPSHUTDOWN was set to TRUE.

In the ExcludeApp I am removing Lync (Skype for Business) and Groove (old OneDrive Sync Agent). If you are installing this fresh it will not install either application.

Below is a table of the XML values and the description of them:

Value Description
Add SourcePath=”\Server\Share” Office will be downloaded to “\server\share” on your network and deployed using installation files at that location.
Add OfficeClientEdition=”32″ Downloads and installs the 32-bit edition of Office
Add Channel=”Broad” Office will be installed using the Semi-Annual Channel.
Product ID=”O365ProPlusRetail” Downloads and installs Office 365 ProPlus.
Language ID=”en-us”
Language ID=”ja-jp”
Downloads and installs English and Japanese versions of Office.
Updates Enabled=”TRUE” Office will check for updates.
Updates UpdatePath=”\Server\Share” Office checks for updates at “\server\share” on your network.
Updates Channel=”Broad” Office updates using the Semi-Annual Channel.
Display Level=”None” AcceptEULA=”TRUE” When installing Office, no user interface is displayed.
Logging Level=”Standard” Path=”%temp%” Log files are stored in the %temp% folder.

Once you have built your configuration.xml file to contain the preferences you require, you can run the following PowerShell command on client computers:

set-location "C:\Transfer\"; .\setup.exe /configure configuration.xml

In this command you are changing the location to where you stored your files, calling the setup.exe installer and telling it to use your configuration.xml file.

But lets say you don’t want to manually copy the files over to every computer, call the exe, and configuration file, how can you remotely install office using this config (if Office is not installed already) or update the Office config (if it’s installed on the client workstation already)?

Using PowerShell, we can install Office / Update Office remotely on as many computers as we want without ever having to go to the users workstation. We can update many workstations in parallel which lets us update groups of computers at a single time. If we want to check the install status on several computers, or a specific computer, we can look up the status of the PowerShell job.

#Get computers to install office on
$Computers = (Get-ADComputer -Filter * -SearchBase "OU=Computers,OU=MyBusiness,DC=Bwyatt,DC=com").Name
ForEach ($Computer in $Computers)
{
	Write-Host "Working on $Computer" -ForegroundColor White
	
	Write-Host "Testing access to $Computer" -ForegroundColor White
	$HostUp = Test-Connection -ComputerName $Computer -BufferSize 12 -Count 1
	If (!($HostUp))
	{
		Write-Warning -Message "Remote Host is not accessible!"	}
	Else
	{
		Write-Host "Success!" -ForegroundColor Green
		$items = Get-Item -Path C:\Transfer\*
		Write-Host "Creating Transfer folder on $Computer" -ForegroundColor Yellow
		New-Item -Path \\$computer\c$\Transfer -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
		foreach ($item in $items)
		{
			Write-Host "Copying $Item over to $Computer\c$\Transfer\" -ForegroundColor Yellow
			Copy-Item -Path $item -Destination \\$Computer\C$\Transfer\ -Force
		}
		Write-Host "Starting setup on $Computer" -ForegroundColor White
		
		Invoke-Command -ScriptBlock { set-location "C:\Transfer\"; .\setup.exe /configure configuration.xml } -ComputerName $Computer -AsJob
	}
}
Get-Job | Format-Table

In my script I am going to install Office on all the Computers in the Chicago office by telling PowerShell to first get all Computers in the Computers OU which is nested in the Chicago OU. It then takes the array of computers and for each computer it will do the following:

  • Get all items located in “C:\Transfer”. This is looking on the server I am running this script from. I have my configuration.xml and setup.exe located here
  • Check to see if each computer is accessible, if not display a warning and move to the next computer
  • Create a new directory on the client computer at C:\ called Transfer so the client computer will also have C:\Transfer
  • Copy all items from the first step to the client computer in the newly created directory at C:\Transfer
  • Start a new PowerShell job which will run the following command: set-location “C:\Transfer\”; .\setup.exe /configure configuration.xml

Since we are adding the AsJob parameter at the end, PowerShell will not wait for the .exe to start, and finish installing before moving to the next computer, it will create a PowerShell job for each computer, this allows us to update multiple computers in parallel.

You can get the status of each computer’s PowerShell job by running Get-Job on the computer you run this from. In my example above we can see that two computers have finished installing/updating Office and it is still installing/updating on WT-LT-02.

On the client workstation you will see several Office processes during the install, when doing it remotely I saw only 2 processes which did not include the OfficeC2RClient process.

 

 

 

Brad Wyatt
Brad Wyatt

My name is Bradley Wyatt; I am a 5x Microsoft Most Valuable Professional (MVP) in Microsoft Azure and Microsoft 365. I have given talks at many different conferences, user groups, and companies throughout the United States, ranging from PowerShell to DevOps Security best practices, and I am the 2022 North American Outstanding Contribution to the Microsoft Community winner.


Office 365, PowerShell
Microsoft Office, Office 365, PowerShell

Post navigation

PREVIOUS
Get Friendly License Name for all Users in Office 365 Using PowerShell
NEXT
Connect to the Microsoft Graph API with PowerShell

2 thoughts on “Remotely Install Office ProPlus / Update Office Configuration on Client Computers with PowerShell”

  1. David Grand says:
    November 6, 2018 at 1:46 pm

    This looks really good and really helpful. I used this as a starting point for my own install of Office via the ODT and PowerShell.

    A quick note. In the PowerShell script you display you are still using the Monthly channel from what I can tell.

    Reply
  2. Jim Blair says:
    March 21, 2019 at 10:29 am

    Awesome man! I’ve toyed around with several scripts, but this is the first one (with a couple tweaks for our configuration) that worked SEAMLESSLY!
    Great job! And THANKS!
    🙂

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Subscribe

Email


Categories

  • Active Directory (8)
  • AI (3)
  • API (1)
  • AutoPilot (2)
  • Azure (15)
  • Bicep (4)
  • Connectwise (1)
  • Defender for Cloud Apps (1)
  • Delegated Admin (1)
  • DevOps (6)
  • Graph (6)
  • Intune (15)
  • LabTech (1)
  • Microsoft Teams (6)
  • Office 365 (19)
  • Permissions (2)
  • PowerShell (50)
  • Security (1)
  • SharePoint (3)
  • Skype for Business (1)
  • Terraform (1)
  • Uncategorized (2)
  • Yammer (1)

Recent Comments

  • MD SHARIQUE AKHTAR on Modern Active Directory – An update to PSHTML-AD-Report
  • TommyBoich on How The ConnectWise Manage API Handles Pagination with PowerShell
  • LOTTERY 365 LOGIN on Windows LAPS Management, Configuration and Troubleshooting Using Microsoft Intune
  • SPRUNKI PHASE 6 on Get a New Computer’s Auto Pilot Hash Without Going Through the Out of Box Experience (OOBE)
  • Mohammad Sherbaji on Get a New Computer’s Auto Pilot Hash Without Going Through the Out of Box Experience (OOBE)

1,738,927 People Reached

© 2025   All Rights Reserved.