Bloquear o hotfix de atualização do Windows específico

7

Gostaria de deixar as Atualizações Automáticas do Windows ativadas, mas impedir que um patch específico seja instalado e esteja causando problemas.

Isso é possível? Alguém sabe como fazer isso?

    
por Twisty Impersonator 27.05.2010 / 15:05

4 respostas

12

Em uma rede maior, você desejará usar o WSUS como apontado pelo DanBig. No entanto, se você desejar bloquear um hot fix individual, poderá fazê-lo com o ID do hot fix usando este script:

If Wscript.Arguments.Count = 0 Then
    WScript.Echo "Syntax: HideWindowsUpdate.vbs [Hotfix Article ID]" & vbCRLF & _
                 "Examples:" & vbCRLF & _
                 "  - Hide KB940157: HideWindowsUpdate.vbs 940157"
    WScript.Quit 1
End If

Dim hotfixId
hotfixId = WScript.Arguments(0)

Dim updateSession, updateSearcher
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateUpdateSearcher()

Wscript.Stdout.Write "Searching for pending updates..." 
Dim searchResult
Set searchResult = updateSearcher.Search("IsInstalled=0")

Dim update, kbArticleId, index, index2
WScript.Echo CStr(searchResult.Updates.Count) & " found."
For index = 0 To searchResult.Updates.Count - 1
    Set update = searchResult.Updates.Item(index)
    For index2 = 0 To update.KBArticleIDs.Count - 1
        kbArticleId = update.KBArticleIDs(index2)
        If kbArticleId = hotfixId Then
            WScript.Echo "Hiding update: " & update.Title
            update.IsHidden = True
        End If        
    Next
Next

Se a atualização não estiver vinculada a um artigo da base de conhecimento, você precisará encontrar a ID de atualização usando este script:

Dim updateSession, updateSearcher
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateUpdateSearcher()

Wscript.Stdout.Write "Searching for pending updates..." 
Dim searchResult
Set searchResult = updateSearcher.Search("IsInstalled=0")

Dim update, kbArticleId, index, index2
WScript.Echo CStr(searchResult.Updates.Count) & " found."
For index = 0 To searchResult.Updates.Count - 1
    Set update = searchResult.Updates.Item(index)
    WScript.Echo update.Identity.UpdateID & ": " & update.Title
Next

E bloqueie usando este script:

If Wscript.Arguments.Count = 0 Then
    WScript.Echo "Syntax: HideWindowsUpdateById.vbs [Update ID]" & vbCRLF & _
                 "Examples:" & vbCRLF & _
                 "  - Hide KB940157: HideWindowsUpdateById.vbs 2ba85467-deaf-44a1-a035-697742efab0f"
    WScript.Quit 1
End If

Dim updateId
updateId = WScript.Arguments(0)

Dim updateSession, updateSearcher
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateUpdateSearcher()

Wscript.Stdout.Write "Searching for pending updates..." 
Dim searchResult
Set searchResult = updateSearcher.Search("UpdateID = '" & updateId & "'")

Dim update, index
WScript.Echo CStr(searchResult.Updates.Count) & " found."
For index = 0 To searchResult.Updates.Count - 1
    Set update = searchResult.Updates.Item(index)
    WScript.Echo "Hiding update: " & update.Title
    update.IsHidden = True
Next

Você também pode fazer tudo isso no Windows PowerShell. Eu criei os scripts no VBScript originalmente porque queria interagir com o Windows Update Agent antes que o PoSH fosse instalado. A API do Windows Update é documentada no MSDN .

    
por 15.12.2011 / 19:25
0

Se você estiver usando o WSUS , poderá recusar uma atualização. Eu não sei como fazer isso de outra maneira.

    
por 27.05.2010 / 15:10
0

No aplicativo Windows Update (no Vista e 7), clique com o botão direito do mouse na atualização que você deseja bloquear e selecione "Ocultar atualização". Isso irá removê-lo da lista e bloqueá-lo durante a instalação automática. Você pode "restaurar" a atualização oculta a qualquer momento no futuro para que ela apareça novamente na lista.

Existe um processo semelhante no site Windows Update de estilo antigo (para o Windows XP), onde é possível ocultar uma atualização. A opção de fazer isso está em um lugar diferente.

    
por 27.05.2010 / 17:18
0

Eu recomendo uma mudança de uma linha para os scripts do Colin. Não sei exatamente por quê, mas acho que estou vendo o número errado da KB, a menos que eu use uma pesquisa como:

updateSearcher.Search("IsInstalled=0 and IsHidden=0")

Se eu especificar apenas IsInstalled = 0, às vezes recebo um número de KB diferente.

Por exemplo: KB2956078 está pronto para instalar na minha máquina. Se eu especificar ambas as condições para Search (), eu vejo:

.Title = Security Update for Microsoft Outlook 2010 (KB2956078) 32-Bit Edition

No entanto, com apenas a condição "IsInstalled = 0", vejo:

.Title = Security Update for Microsoft Outlook 2010 (KB4011273) 32-Bit Edition

Olhando para o Windows Update, vejo que KB2956078 é a atualização que está sendo exibida. Além disso, estou configurando essa atualização como oculta, e isso funciona corretamente e oculta a atualização com a alteração que estou propondo.

Atualização menor: talvez eu tenha descoberto por que isso está acontecendo. Eu tenho suprimido certas atualizações do Outlook que quebram o script do Outlook. As duas atualizações em questão têm títulos muito semelhantes, e parece que o Windows Update fica confuso.

    
por 31.01.2018 / 20:28