Este script PowerShell pode ser usado para bloquear automaticamente todas as novas atualizações de qualidade no WSUS. Deve ser executado diretamente no servidor do WSUS. No que diz respeito ao funcionamento do script, primeiro o script pesquisa atualizações instaláveis não aprovadas com a palavra "qualidade" no título. Se tais atualizações forem encontradas, elas serão listadas e o usuário terá a opção de continuar e bloquear as atualizações, ou não, por meio de um prompt de entrada.
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
$updateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
# Retrieve only updates that have not yet been approved
$updateScope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::NotApproved
# Retrieve only updates that are installable
$updateScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled
$totalUpdateCount = $wsus.GetUpdateCount($updateScope)
$qualityUpdates = $wsus.GetUpdates($updateScope) | Where-Object {$_.Title -like '*quality*'}
$qualityUpdateCount = $qualityUpdates.Length
if ($qualityUpdateCount -gt 0) {
$qualityUpdates | select title
Write-Host "=========================================="
$confirmation = Read-Host "$qualityUpdateCount quality updates out of $totalUpdateCount total non-approved installable updates were found. Decline? (y/n)"
if ($confirmation -eq 'y') {
$wsus.GetUpdates($updateScope) | Where-Object {$_.Title -like '*quality*'} | ForEach {
Write-Verbose ("Declining {0}" -f $_.Title) -Verbose
$_.Decline()
}
}
} Else {
Write-Host "No non-approved installable updates were found."
}
Se você quiser recusar atualizações de qualidade automaticamente, execute uma versão ligeiramente modificada do script acima como uma tarefa do Windows.
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
$updateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
# Retrieve only updates that have not yet been approved
$updateScope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::NotApproved
# Retrieve only updates that are installable
$updateScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled
$totalUpdateCount = $wsus.GetUpdateCount($updateScope)
$qualityUpdates = $wsus.GetUpdates($updateScope) | Where-Object {$_.Title -like '*quality*'}
$qualityUpdateCount = $qualityUpdates.Length
if ($qualityUpdateCount -gt 0) {
$wsus.GetUpdates($updateScope) | Where-Object {$_.Title -like '*quality*'} | ForEach {
$_.Decline()
}
}
NOTA: eu escrevo o script acima com alguma ajuda de Ótimo tutorial de script de powershell do WSUS do Boe Prox .