WSUS/SUP software updates sync failing because of “Upgrades” classification

Author by Marcus Musial

If you selected the update classification “Upgrades” in your Configuration Manager's SUP (Software Update Point) properties before installing update KB3095113, then you caused some issues in your WSUS catalog and SUSDB.  These issues prevent Configuration Manager to successfully sync with the WSUS catalog.  Thankfully, Microsoft released a fix to this issue.  Their solution is to use PowerShell to delete all the old (Pre KB3095113) “Upgrade” updates from WSUS and initiate a new sync (of course after you have installed KB3095113).  In the comments section of that blog, user GolfUMC gives us a more complete PowerShell script to do this.  It is missing a few Windows 10 editions.  The below script takes his very cool script and adds those other editions.  After running this script, I could sync “Upgrades” into SCCM successfully and had no sync failures.  The script does take some time, but thankfully it does pipe out what it is doing.  If you are still having sync issues you may have other issues with your WSUS or SUP set up which this blog will not address (SORRY).
So to review the steps:
1. Install KB3095113 and reboot on your WSUS/SUP server(s).
2. Run the below script from elevated Powershell.  (THE SCRIPT WILL KICK OFF A WSUS SYNC as it's last step).
3. Once the WSUS sync is finished (watch WSUS console), kick off a SUP sync from SCCM console and review wsyncmgr.log for status.
 
#BEGINNING OF SCRIPT
 
Get-WsusClassification | Where-Object -FilterScript {$_.Classification.Title -Eq “Upgrades”} | Set-WsusClassification -Disable
 
# delete all update content on the current server belonging to the 1511 release
$1511EDU = “Windows 10 Education, version 1511, 10586”
$1511EDUN = “Windows 10 Education N, version 1511, 10586”
$1511PRO = “Windows 10 Pro, version 1511, 10586”
$1511PRON = “Windows 10 Pro N, version 1511, 10586”
$1511ENT = “Windows 10 Enterprise, version 1511, 10586”
$1511ENTN = “Windows 10 Enterprise N, version 1511, 10586”
 
$wsus = Get-WsusServer
($wsus.SearchUpdates($1511EDU)).Count
$wsus.SearchUpdates($1511EDU) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Yellow; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1511EDUN)).Count
$wsus.SearchUpdates($1511EDUN) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Yellow; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1511PRO)).Count
$wsus.SearchUpdates($1511PRO) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Cyan; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1511PRON)).Count
$wsus.SearchUpdates($1511PRON) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Cyan; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1511ENT)).Count
$wsus.SearchUpdates($1511ENT) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Green; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1511ENTN)).Count
$wsus.SearchUpdates($1511ENTN) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Green; $wsus.DeleteUpdate($_.Id.UpdateId) }
 
# delete all update content on the current server belonging to the 1607 release
 
$1607PRO = “Windows 10 Pro, version 1607”
$1607PRON = “Windows 10 Pro N, version 1607”
$1607EDU = “Windows 10 Education, version 1607”
$1607EDUN = “Windows 10 Education N, version 1607”
$1607ENT = “Windows 10 Enterprise, version 1607”
$1607ENTN = “Windows 10 Enterprise N, version 1607”
 
($wsus.SearchUpdates($1607PRO)).Count
$wsus.SearchUpdates($1607PRO) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Yellow; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1607PRON)).Count
$wsus.SearchUpdates($1607PRON) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Yellow; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1607EDU)).Count
$wsus.SearchUpdates($1607EDU) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Cyan; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1607EDUN)).Count
$wsus.SearchUpdates($1607EDUN) | foreach { Write-Host “Deleting $($_.Title)” -ForegroundColor Cyan; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1607ENT)).Count
$wsus.SearchUpdates($1607ENT) | foreach { Write-Host “Deleting $($_.Title) NON EN-US” -ForegroundColor Green; $wsus.DeleteUpdate($_.Id.UpdateId) }
($wsus.SearchUpdates($1607ENTN)).Count
$wsus.SearchUpdates($1607ENTN) | foreach { Write-Host “Deleting $($_.Title) NON EN-US” -ForegroundColor Green; $wsus.DeleteUpdate($_.Id.UpdateId) }
#($wsus.SearchUpdates($1607ENT) | ? {$_.title -notlike “*en-us*”}).Count
#$wsus.SearchUpdates($1607ENT) | ? {$_.title -notlike “*en-us*”} | foreach { Write-Host “Deleting $($_.Title) NON EN-US” -ForegroundColor Green; $wsus.DeleteUpdate($_.Id.UpdateId) }
 
# enable Upgrades classification
 
Get-WsusClassification | Where-Object -FilterScript {$_.Classification.Title -Eq “Upgrades”} | Set-WsusClassification
 
# perform full sync
$sub = $wsus.GetSubscription()
$sub.StartSynchronization()
 
#ENDING OF SCRIPT