Auslösen der Installation des heruntergeladenen WSUS-Updates per Fernzugriff

7

Das nervt mich schon eine Weile. Wir haben unsere Server so eingestellt, dass sie nur Windows-Updates herunterladen, um sie für die Installation in einem unserer zweimonatlichen Patch-Fenster bereitzustellen. Ich habe nach einer Möglichkeit gesucht, die Installation während dieser Zeit remote auf den Servern auszulösen, damit ich mich nicht bei hundert oder mehr Servern anmelden und auf die Sprechblase "Updates jetzt installieren" klicken muss.

Kennt jemand eine Möglichkeit, die Update-Installationen remote auszulösen?

Zypher
quelle
Frage: [An dieser Stelle müssen Sie dem Batch-Skript lediglich eine Textdatei mit den Namen Ihrer Computer übergeben - eine pro Zeile, und schon kann es losgehen. Sie müssen sich nicht mehr bei jedem Server anmelden, um Windows Update-Installationen zu starten!] Können Sie bitte die Ausführung des obigen Prozesses im Detail erläutern?

Antworten:

6

Ich habe es endlich herausgefunden. Es gibt eine (kaum) dokumentierte Windows Update-API, mit der Sie diese Art von Dingen auslösen können. Ich habe eine modifizierte Form des hier gefundenen Skripts verwendet, die der Dokumentation so nahe wie möglich kommt.

Ich habe es wie folgt geändert und die Download-Teile herausgenommen - weil ich den Download mit GPO und WSUS sowie allen Eingabeaufforderungen steuere. Dann habe ich einen Code eingefügt, um die Box neu zu starten, falls dies für die Updates erforderlich ist.

Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()
WScript.Echo "Searching for updates..." & vbCRLF

Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'")


WScript.Echo "List of applicable items on the machine:"

For I = 0 To searchResult.Updates.Count-1
    Set update = searchResult.Updates.Item(I)
    WScript.Echo I + 1 & "> " & update.Title
Next

If searchResult.Updates.Count = 0 Then
    WScript.Echo "There are no applicable updates."
    WScript.Quit
End If


Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")

WScript.Echo  vbCRLF & _
"Creating collection of downloaded updates to install:" 

For I = 0 To searchResult.Updates.Count-1
    set update = searchResult.Updates.Item(I)
    If update.IsDownloaded = true Then
       WScript.Echo I + 1 & "> adding:  " & update.Title 
       updatesToInstall.Add(update) 
    End If
Next

'WScript.Echo  vbCRLF & "Would you like to install updates now? (Y/N)"
'strInput = WScript.StdIn.Readline
'WScript.Echo 

'If (strInput = "N" or strInput = "n") Then 
'   WScript.Quit
'ElseIf (strInput = "Y" or strInput = "y") Then
    WScript.Echo "Installing updates..."
    Set installer = updateSession.CreateUpdateInstaller()
    installer.Updates = updatesToInstall
    Set installationResult = installer.Install()

    'Output results of install
    WScript.Echo "Installation Result: " & _
    installationResult.ResultCode 
    If (installationResult.RebootRequired = True) Then
        Set RebootShell = WScript.CreateObject("Wscript.Shell")
        RebootShell.Run "shutdown.exe -r -t 0"
    End If

    WScript.Echo "Reboot Required: " & _ 
    installationResult.RebootRequired & vbCRLF 
    WScript.Echo "Listing of updates installed " & _
     "and individual installation results:" 

    For I = 0 to updatesToInstall.Count - 1
        WScript.Echo I + 1 & "> " & _
        updatesToInstall.Item(i).Title & _
        ": " & installationResult.GetUpdateResult(i).ResultCode         
    Next
'End If

Der nächste Schritt bestand darin, dies mit psExec zusammenzukleben - was es nicht mag, VBScripts remote auszuführen. Ich habe die folgende Batchdatei zusammengestellt, um das Skript lokal auf den Server zu kopieren, und dann die Installation mit psExec gestartet, das als Systembenutzer ausgeführt wird:

for /f %%i in (%1) do copy installUpdates.vbs \\%%i\c$
psexec @%1 -s cscript C:\installUpdates.vbs

An dieser Stelle müssen Sie dem Batch-Skript lediglich eine Textdatei mit den Namen Ihrer Computer übergeben - eine pro Zeile, und schon kann es losgehen. Sie müssen sich nicht mehr bei jedem Server anmelden, um Windows Update-Installationen zu starten!

Das einzige Problem, das ein wenig ärgerlich ist, ist, dass dies eine serielle Ausführung ist. Wenn Sie also viele Updates haben, kann dies eine Weile dauern. Ich konnte keinen guten Weg finden, um dies zu umgehen, außer Ihre Maschinenliste aufzubrechen und mehrere Kopien der Batch-Datei auszuführen. Nicht das Ende der Welt.


Ein kleines Update. Ich habe herausgefunden, dass es einige Installationen gibt, bei denen Sie nur interaktiv mit den richtigen Installationsberechtigungen angemeldet sein müssen. Wenn wsus sagt, dass die Installation fehlgeschlagen ist, müssen Sie sich auf die Box begeben. Obwohl dies ein schöner Schritt ist, nachdem Sie sich in JEDER Box anmelden müssen.

Zypher
quelle
3

Verwenden Sie ein Gruppenrichtlinienobjekt, um festzulegen, dass alle automatisch zu einem bestimmten Zeitpunkt in Ihrem Fenster installiert werden, und genehmigen Sie dann erst einige Stunden vor Ablauf Ihrer zweimonatlichen Fenster Updates?

Sie können sie weiterhin für Ihre Prüfstandsmaschinen genehmigen, um zu sehen, ob sie die Welt zum Implodieren bringen. Dadurch wird sichergestellt, dass sie alle vor dem Fenster heruntergeladen werden, und für alle Server genehmigt, bevor Sie das Büro verlassen Tag während Ihres Update-Fensters (ich nehme an, es ist zu einer gottlosen Stunde des Morgens, für die Sie nicht bereit sein möchten), sollten alle erledigt sein, bis Sie am nächsten Tag kommen.

Mark Henderson
quelle
Ich habe darüber nachgedacht, obwohl ich selbst nach dem Patchen des Testlabors, dann des warmen Standby-Rechenzentrums ... immer noch paranoid werde. Wäre lieber in der Lage, sekundäre Clusterknoten Failover zu patchen und einen Backout-Plan für alle Fälle zu haben. Auch ja, es ist eine gottlose Stunde, aber ich bin trotzdem wach, da wir das Fenster verwenden, um unsere warme Site zu testen (ein Ausfall von mehr als 2 DS3s ist kein Skript für mich :) und wenn die Updates einen Neustart benötigen, werde ich geweckt sowieso auf.
Zypher
0

Wenn Sie nicht sequentiell ausführen möchten, fügen Sie einfach -d zur PSEXEC-Befehlszeile hinzu. Anschließend wird die Datei installupdates.vbs nicht interaktiv ausgeführt.


quelle
0

Es gibt auch WuInstall . Die kostenlose Version scheint nicht besser zu sein als das von Ihnen zusammengestellte WUA-API-Skript, aber die Pro-Version bietet die Option, die Eula automatisch zu akzeptieren. Ich würde mir vorstellen, dass dies die Ursache für die meisten erforderlichen interaktiven Updates ist.

WheresAlice
quelle