Blockieren Sie einen bestimmten Windows Update-Hotfix

7

Ich möchte die automatischen Windows-Updates aktiviert lassen, aber die Installation eines bestimmten Patches blockieren, der Probleme verursacht.

Ist das möglich? Weiß jemand, wie man das macht?

Ich sage Reinstate Monica
quelle

Antworten:

12

In einem größeren Netzwerk möchten Sie WSUS verwenden, wie DanBig hervorhob. Wenn Sie jedoch einen einzelnen Hotfix blockieren möchten, können Sie dies mit der Hotfix-ID mithilfe dieses Skripts tun:

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

Wenn das Update nicht mit einem KB-Artikel verknüpft ist, müssen Sie die Update-ID mithilfe dieses Skripts ermitteln:

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

Und blockieren Sie es mit diesem Skript:

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

Sie können alle oben genannten Schritte auch in Windows PowerShell ausführen. Ich habe die Skripte ursprünglich in VBScript erstellt, weil ich vor der Installation von PoSH mit dem Windows Update-Agenten interagieren wollte. Die Windows Update-API ist auf MSDN dokumentiert .

Colin Bowern
quelle
Sehr schön! Ich habe das Skript in superuser.com/a/922921/172012 leicht geändert , um mehrere Hotfixes gleichzeitig zu akzeptieren.
Opmet
Sehr hilfreich, danke, insbesondere die Schleife zum Auffinden von Updates nach KB-Nummer. Ich habe das in mein Skript zum Deinstallieren und Ausblenden von Microsoft-Updates aufgenommen: mcbsys.com/blog/2015/11/uninstall-and-hide-windows-updates .
Mark Berry
0

Wenn Sie WSUS verwenden , können Sie ein Update ablehnen. Ich weiß nicht, wie ich es anders machen könnte.

DanBig
quelle
Ich weiß , seine über WSUS, aber nicht sicher, wie Policen für diese anzuwenden serverfault.com/questions/718232/...
Alex S
0

Klicken Sie in der Windows Update-Anwendung (unter Vista und 7) mit der rechten Maustaste auf das Update, das Sie blockieren möchten, und wählen Sie "Update ausblenden". Dadurch wird es aus der Liste entfernt und die Installation während der automatischen Installation blockiert. Sie können das versteckte Update jederzeit in der Zukunft "wiederherstellen", damit es wieder in der Liste angezeigt wird.

Auf der älteren Windows Update-Website (für Windows XP) gibt es einen ähnlichen Vorgang, bei dem Sie ein Update ausblenden können. Die Option dazu befindet sich jedoch an einem anderen Ort.

Justin Scott
quelle
0

Ich empfehle eine einzeilige Änderung der Colin-Skripte. Ich weiß nicht genau warum, aber ich sehe, dass ich die falsche KB-Nummer sehe, es sei denn, ich verwende eine Suche wie:

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

Wenn ich nur IsInstalled = 0 spezifiziere, erhalte ich manchmal eine andere KB-Nummer.

Beispiel: KB2956078 kann auf meinem Computer installiert werden. Wenn ich beide Bedingungen für Search () spezifiziere, sehe ich:

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

Mit nur der Bedingung "IsInstalled = 0" sehe ich jedoch:

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

Wenn ich mir Windows Update anschaue, sehe ich, dass KB2956078 das Update ist, das angezeigt wird. Außerdem setze ich dieses Update auf "Ausgeblendet" und das funktioniert ordnungsgemäß und verbirgt das Update mit der von mir vorgeschlagenen Änderung.

Kleines Update: Ich habe möglicherweise herausgefunden, warum dies geschieht. Ich habe bestimmte Outlook-Updates unterdrückt, die die Outlook-Skripterstellung beschädigen. Die beiden fraglichen Updates haben sehr ähnliche Titel und es sieht so aus, als würde Windows Update verwirrt.

trindflo
quelle