Best Practices for Upgrading GPO-Deployed Software Packages in Active Directory Environments


4 views

When managing software deployments through Group Policy Objects (GPO), upgrading existing packages requires careful consideration. Let's examine the three primary approaches with their technical implications:

This method involves replacing the MSI file at the distribution point and using the 'Redeploy application' function:

# PowerShell command to trigger redeployment (for reference)
Get-GPO -Name "Install X" | Set-GPPermission -PermissionLevel GpoApply -Replace -TargetName "Domain Computers"

Disadvantages:

  • Limited version control - difficult to track which clients received which version
  • Potential conflicts if the MSI isn't properly configured for upgrades
  • No rollback capability if issues arise

The proper upgrade procedure involves creating a new package with upgrade relationships:

<!-- Sample XML snippet for upgrade detection in MSI -->
<Upgrade Id="YOUR_UPGRADE_CODE">
  <UpgradeVersion Minimum="1.0.0" Maximum="1.0.0" 
                  Property="PREVIOUSVERSIONSINSTALLED" />
  <UpgradeVersion Minimum="0.0.0" OnlyDetect="yes" 
                  Property="NEWERPRODUCTFOUND" />
</Upgrade>

Implementation steps:

  1. Create new GPO or modify existing one
  2. Right-click Software Installation → New → Package
  3. Select the new MSI and choose "Advanced"
  4. Navigate to the Upgrades tab → Add → Select old package

While this method works, it's generally less efficient:

  • Forces application removal before installation
  • May cause temporary service interruptions
  • User settings might not persist through the reinstallation

Several factors influence your upgrade strategy:

Factor Impact
MSI Upgrade Code Must match between versions
Versioning Scheme Should follow semantic versioning
Dependencies May require additional handling

For upgrading Java Runtime across your domain:

# Log snippet from GPO upgrade operation
[MSI] Executing op: UpgradeRelatedProducts(...)
[MSI] Property: PREVIOUSVERSIONSINSTALLED = 8.0.1720.0
[MSI] Property: NEWPRODUCTFOUND = 8.0.2210.0
[MSI] Action: InstallValidate

Remember to test upgrades in a controlled environment before domain-wide deployment. The event log (Application and GroupPolicy/Operational) provides valuable debugging information during upgrade operations.


When deploying software through Group Policy Objects (GPO), the Windows Installer (MSI) packages are stored in a network share with appropriate permissions (Read & Execute for Domain Computers). The deployment can be either assigned (mandatory installation) or published (available in Control Panel).

Option 1 (Redeploy): Replacing the MSI and using redeploy forces all clients to reinstall the application on next policy refresh. The main disadvantages include:

  • Forces complete reinstallation regardless of version
  • Generates more network traffic
  • May cause temporary application unavailability

Option 2 (Upgrade): The proper method involves creating a new package with upgrade settings:

# PowerShell snippet to check upgrade codes
$installer = New-Object -ComObject WindowsInstaller.Installer
$product = $installer.ProductsEx("YourProductCode", "", 7)
$upgradeCode = $product.InstallProperty("UpgradeCode")

1. Verify the new MSI supports upgrades by checking its UpgradeTable:

Orca.exe → Open MSI → View → Upgrade Table

2. In Group Policy Management Console:

  • Right-click the existing package → Properties → Upgrades tab
  • Click "Add" to specify the new package
  • Select "Uninstall the existing package..." for major version changes

Consider upgrading Notepad++ from v7.9 to v8.0:

# Sample transform file (MST) for upgrade scenarios
INSTALLDIR="C:\Program Files\Notepad++\"
REINSTALL=ALL
REINSTALLMODE=vomus

The complete upgrade process should be tested in this order:

  1. Test workstations with gpupdate /force
  2. Verify installation logs (%windir%\logs\msi*.log)
  3. Monitor network bandwidth during mass deployment

When upgrades fail, check these key areas:

  • Event Viewer → Applications and Services Logs → Microsoft → Windows → MSIInstaller
  • Verify network share permissions haven't changed
  • Check for conflicting transform files (MST)

For advanced scenarios, use verbose logging:

msiexec /i package.msi /lvx* logfile.txt