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


16 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