You can differentiate the two products based on Parent Category
then incorporate IDs for comparison
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer()
$DesiredProducts = ($wsus.GetUpdateCategories() | Where {$_.Title -EQ "Windows"}).GetSubcategories() | Where {$_.Title -EQ "Windows Server 2019"} | Select Title, ID
Write-Host "Desired products to be enabled:`n $($DesiredProducts.Title)"
$Wsus = Get-WsusServer
$Subscription = $Wsus.GetSubscription()
$EnabledProducts = $Subscription.GetUpdateCategories() | Select Title, ID
Write-Host "The following products are currently enabled: $($EnabledProducts.Title -Join '; ')"
$Differences = @(compare $EnabledProducts $DesiredProducts -Property Title, ID)
If ($Differences.Count -gt 0) {
# product list doesn't match- Show the differences, then correct them
$DiffTable = $Differences | Select @{Name="Product";Expression={$_.Title}} , @{Name="Difference";Expression={If($_.SideIndicator -eq "<=") {"Extra Product"} Else {"Missing Product"}}} | Format-Table | Out-String
Write-Host "Diffrerences between Current Product settings and Desired product settings:`n$DiffTable" -ForegroundColor Cyan
foreach ($Difference in $Differences) {
$ProductTitle = $Difference.Title
$ProductID = $Difference.ID.Guid
$ProductObj = Get-WsusProduct | where {$_.Product.ID -eq $ProductID}
If (-not ([bool] $ProductObj)) {
Write-Error "Product '$ProductTitle' is not a product WSUS knows about. You may need to perform a Category Synchronization to discover new product definitions."
} Else {
If($Difference.SideIndicator -eq "<=") {
# Extra product - Disable it
Write-Host "Disabling extra product: '$ProductTitle'"
$ProductObj | Set-WsusProduct -Disable -Verbose
} Else {
# Missing product - Enable it
Write-Host "Enabling missing product: '$ProductTitle'"
$ProductObj | Set-WsusProduct -Verbose
}
}
}
} Else {
#Product list matches
Write-Host "No WSUS product changes required." -ForegroundColor Green
}