Como recusar automaticamente as atualizações de agregação de qualidade no WSUS

4

Como você provavelmente sabe, agora não é possível escolher atualizações específicas para aprovar ou recusar no WSUS para sistemas operacionais Windows mais antigos. Para servidores, em geral, existem apenas dois tipos: um roll up para as atualizações de segurança do mês e um pacote abrangente que inclui todas as atualizações de segurança e "qualidade".

Para servidores, estou interessado apenas em avaliar e aprovar atualizações de segurança, e recusarei todas as atualizações de "qualidade". No entanto, atualizações de qualidade e segurança parecem agrupadas sob as mesmas classes e categorias de classificação do MSRC. A única maneira de distinguir entre os dois parece ser o próprio título de atualização (ou seja, se o título de atualização inclui ou não "qualidade").

Como os nomes das atualizações de qualidade e segurança são muito semelhantes, e não há uma maneira fácil que eu possa separar completamente um ao outro na visão do WSUS, temo que eventualmente eu ou outra pessoa fiquemos descuidados e aprovar uma atualização de qualidade por engano. A melhor maneira de aliviar o problema é simplesmente recusar automaticamente todas as atualizações de qualidade.

Alguém sabe como fazer isso? Uma solução alternativa poderia ser encontrar uma visão no WSUS que torne mais fácil discernir entre atualizações de qualidade e segurança, ou não ter atualizações de qualidade de servidor no WSUS.

O servidor do WSUS é o Windows 2008 R2 e a versão do WSUS é a 3.2.7600.226.

    
por wrieedx 18.10.2016 / 03:30

1 resposta

0

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 .

    
por 26.10.2016 / 03:32