Verwenden eines Visual Basic Skripts zum Installieren des Sicherheitspatch 824146 (MS03-039) oder 823980 (MS03-026) auf Remote-Hostcomputern

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 827227 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
827227 How to use a visual basic script to install the 824146 (MS03-039) or 823980 (MS03-026) security patch on remote host computers
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel enthält ein Microsoft Visual Basic Scripting Edition-Beispielskript mit dem Namen "Patchinstall.vbs". Dieses Skript ist ein Beispiel dafür, wie ein Netzwerkadministrator ein WMI-Skript (WMI = Windows Management Instrumentation) verwenden kann, um den Sicherheitspatch 824146 (MS03-039) oder 823980 (MS03-026) in einer Microsoft Windows NT-, Windows 2000- oder Windows Server 2003-Domänenumgebung auf Remote-Hostcomputern zu installieren, auf denen der Patch noch nicht installiert wurde. Das Skript "Patchinstall.vbs" verwendet eine Datei (Ipfile.txt), die IP-Adressen als Eingabe enthält, und installiert den Sicherheitspatch 824146 (MS03-039) oder 823980 (MS03-026) von einem bekannten Speicherort auf dem Remote-Hostcomputer ("C:\Patchinst.exe"). Weitere Informationen zu dem Sicherheitspatch 824146 (MS03-039) finden Sie in folgendem Artikel der Microsoft Knowledge Base:
824146 MS03-039: Pufferüberlauf in RPCSS kann Ausführung von böswilligem Programmcode ermöglichen
Weitere Informationen zu dem Sicherheitspatch 823980 finden Sie in folgendem Artikel der Microsoft Knowledge Base:
823980 MS03-026: Pufferüberlauf in RPC kann Ausführung von Code ermöglichen
Weitere Informationen zu einem Tool, mit dem Netzwerkadministratoren ihr Netzwerk nach Computern durchsuchen können, auf denen diese Sicherheitspatches nicht installiert sind, finden Sie in folgendem Artikel der Microsoft Knowledge Base:
827363 Verwendung des Scan-Tools "KB824146Scan" zur Identifikation von Hostcomputern, auf denen die Sicherheitspatches 823980 (MS03-026)und 824146 (MS03-039) nicht installiert sind

Hinweise

  • Sie müssen über Administratorrechte auf den Remote-Zielcomputern verfügen, um den Sicherheitspatch 824146 oder 823980 erfolgreich installieren zu können.
  • Zielcomputer mit Microsoft Windows XP müssen einer Windows NT-, Windows 2000- oder Windows Server 2003-Domäne beitreten, damit das Skript "Patchinstall.vbs" erfolgreich angewendet werden kann.
  • Das Skript "Patchinstall.vbs" nutzt Windows Management Instrumentation (WMI). WMI ist abhängig vom Distributed Component Object Model (DCOM). Daher funktioniert das Skript "Patchinstall.vbs" nicht auf Zielcomputern, auf denen DCOM deaktiviert wurde, um die in den Microsoft Security Bulletins MS03-039 oder MS03-026 beschriebene Sicherheitsanfälligkeit zu umgehen.
  • Das Sicherheitspatchpaket 824146 oder 823980 muss sich in einem lokalen Ordner auf dem Computer befinden, auf dem das Skript "Patchinstall.vbs" ausgeführt wird, und das jeweilige Paket muss in den Namen "Patch_XP.exe" (für Windows XP), "Patch_W2K.exe" (für Windows 2000) oder "Patch_W2K3.exe" (für Windows Server 2003) umbenannt werden.
  • Sie können das Skript "Patchinstall.vbs" modifizieren, um andere Patches zu installieren.

Weitere Informationen

Das Skript "Patchinstall.vbs" führt folgende Aufgaben aus:
  • Das Skript liest eine Liste von IP-Adressen für die Remote-Hostcomputer, auf denen Sie den Sicherheitspatch 824146 oder 823980 installieren möchten. Das Skript ruft diese Liste von einer ASCII-Textdatei (Ipfile.txt) ab, die eine Liste mit IP-Adressen (eine IP-Adresse pro Zeile) enthält. Sie können beispielsweise die Protokolldatei "Vulnerable.txt" des Scan-Tools "KB824146Scan" als Datei Ipfile.txt verwenden.
  • Das Skript ruft die erste IP-Adresse von der Liste ab.
  • Das Skript ermittelt die Windows-Version auf dem Zielcomputer.
  • Das Skript ordnet Laufwerk Z auf dem Skriptcomputer dem Laufwerk C auf dem Zielcomputer zu.
  • Das Skript kopiert die korrekte Version des Patches (für Windows XP, Windows 2000 oder Windows Server 2003) nach "C:\Patchinst.exe" auf dem Zielcomputer (über die Zuordnung des Laufwerks Z).
  • Das Skript veranlasst die Installation des Patches und startet anschließend die Zielcomputer automatisch neu, ohne dass Benutzereingaben erforderlich sind oder Dialogfelder angezeigt werden (unbeaufsichtigter Installationsmodus mit den Optionen -q -f).
  • Das Skript wartet, bis der Installationsvorgang abgeschlossen ist.
  • Das Skript versucht, die Datei "C:\Patchinst.exe" auf dem Zielcomputer zu löschen.
  • Das Skript entfernt die Zuordnung des Laufwerks Z.
  • Das Skript verarbeitet die nächste IP-Adresse in der Liste.
Wichtig: Microsoft empfiehlt, dieses Beispielskript für Ihre Netzwerkumgebung zu modifizieren, und Ihr Skript anschließend in einer Testumgebung zu testen, bevor Sie es in einer Produktionsumgebung anwenden.

Fügen Sie das folgende Skript in eine Textdatei mit dem Namen "Patchinstall.vbs" ein, um das Skript "Patchinstall.vbs" zu verwenden. Führen Sie das Skript "Patchinstall.vbs" anschließend über die folgende Befehlszeile aus:
cscript patchinstall.vbs Ipfile.txt LocalPathToPatches
In diesem Befehl steht Ipfile.txt für eine Textdatei, die eine Liste mit IP-Adressen für die Remote-Hostcomputer enthält, auf denen Sie den Sicherheitspatch 824146 oder 823980 installieren möchten. Lokaler_Patchpfad steht für den vollständigen Pfad eines Ordners, der das Sicherheitspatchpaket 824146 oder 823980 enthält (umbenannt zu "Patch_XP.exe" für Windows XP, "Patch_W2k.exe" für Windows 2000 oder "Patch_W2k3.exe" für Windows Server 2003).

Das Skript "Patchinstall.vbs"

Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen. Die Spezialisten von Microsoft Product Support Services können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind.
' Patchinstall.vbs
' Patch installation script for MS03-026 and MS03-039
' (c) Microsoft 2003
' v1.03 cl

on error resume next

const XP_Patch = "Patch_XP.exe"
const W2k_Patch = "Patch_W2k.exe"
const W2k3_Patch = "Patch_W2k3.exe"

If right(ucase(wscript.FullName),11)="WSCRIPT.EXE" then
     wscript.echo "ERROR: You must run this script using cscript, for example 'cscript " & wscript.scriptname & "'."
     wscript.quit 0
end if

' USAGE
if wscript.arguments.count <> 2 then
     wscript.echo "Usage: cscript " & wscript.scriptname & " <IpFile.txt> <LocalPathToPatches>" & vbCrLf & vbCrLf & _
     "  <LocalPathToPatches> must be a full path of a folder that contains all of these files:" & vbCrLf & _
     "      " & XP_Patch & vbCrLf & _ 
     "      " & W2k_Patch & vbCrLf & _ 
     "      " & W2k3_Patch
     wscript.quit
end if

ipFile = wscript.arguments(0)
localPathToPatches = wscript.arguments(1)

set onet = createobject("wscript.network")
set ofs = createobject("scripting.filesystemobject")

' Verify that ipfile is accessible.
set oipFile = ofs.opentextfile(ipFile, 1, false)
if (Err.Number <> 0) then
     wscript.echo "Cannot open " & ipFile
     wscript.quit
end if

' Make sure to end with a \ character.
if right(localPathToPatches, 1) <> "\" then
     localPathToPatches = localPathToPatches & "\"
end if

'Note that cim_datafile does not support UNC paths
'so everything must be handled through mapped drives.
if left(localPathToPatches, 2) = "\\" then
     wscript.echo "<pathToExecutable> cannot be a UNC path, please map a drive locally"
     wscript.quit
end if

exeWinXP = ofs.getfile(localPathToPatches + XP_Patch).name
exeW2k = ofs.getfile(localPathToPatches + W2k_Patch).name
exeW2k3 = ofs.getfile(localPathToPatches + W2k3_Patch).name

' Verify that the patches are accessible.
if ((len(exeWinXP) = 0) OR (len(exeW2k) = 0) OR (len(exeW2k3) = 0)) then
     wscript.echo "Cannot find patch files."
     wscript.echo "Please verify that the <LocalPathToPatches> folder contains all of these files:" & vbCrLf & _
     "      " & XP_Patch & vbCrLf & _ 
     "      " & W2k_Patch & vbCrLf & _ 
     "      " & W2k3_Patch
     wscript.quit
end if


set osvcLocal = getobject("winmgmts:root\cimv2")

'The error-handling code is below the function that may throw one - execute it.
on error resume next

while not oipFile.atEndOfStream
     ip = oipFile.ReadLine()
     wscript.echo vbCrLf & "Connecting to " & ip & "..."

     Err.Clear
     set osvcRemote = GetObject("winmgmts:\\" & ip & "\root\cimv2")

     if (Err.Number <> 0) then
          wscript.echo "Failed to connect to " & ip & "."
     else

          exeCorrectPatch = detectOSPatch(osvcRemote)
          if (exeCorrectPatch <> "") then
               ' Lay the bits on the remote computer.
               wscript.echo "Installing patch " & exeCorrectPatch & "..."

               onet.mapnetworkdrive "z:", "\\" & ip & "\C$"
               set osourceFile = osvcLocal.get("cim_datafile=""" & replace(localPathToPatches, "\", "\\") & exeCorrectPatch & """")
               ret = osourceFile.Copy("z:\\Patchinst.exe")

               if (ret <> 0 and ret <> 10) then
                    ' Failure detected and failure was not "file already exists."
                    wscript.echo "Failed copy to " & ip & " - error: " & ret
               else
                    set oprocess = osvcRemote.Get("win32_process")
     
                    ' Start the installation without user interaction, and force a restart after completion.
                    ret = oprocess.create("c:\\Patchinst.exe -q -f")
                    if (ret <> 0) then
                         wscript.echo "Failed to start process on " & ip & ": " & ret
                    else
                         ' Get a reference to the file that was copied.
                         set odestFile = osvcLocal.get("cim_datafile=""z:\\Patchinst.exe""")

                         ' Wait for the installation to complete.
                         for waitTime = 0 to 120     ' Lay and wait--up to two minutes for the installation to complete.
                              wscript.Sleep 1000     ' Sleep one second.
                              ' Delete temporary file as soon as possible after it is freed.
                              if (odestFile.Delete() = 0) then
                                   exit for
                              end if
                         next ' Otherwise, loop again and keep waiting...

                         wscript.echo "Installation successful."

                    end if     'Create process succeeded.
               end if     'Copy succeeded.

               onet.removenetworkdrive "z:", true
          end if      ' The script knows which patch to install.
     end if ' Do the next IP address, then the next IP address... 
wend

oipFile.close()

'Clean up, remove drive mapping (check this time, because it may not have been mapped).
if ofs.folderexists("z:\") then
     onet.removenetworkdrive "z:", true
end if

wscript.echo vbCrLf & "Patching complete. Exiting."

function detectOSPatch(osvcRemote)

     set oOSInfo = osvcRemote.InstancesOf("Win32_OperatingSystem")
     'Only one instance is ever returned (the currently active OS), even though the following is a foreach.
     for each objOperatingSystem in oOSInfo

          if (objOperatingSystem.OSType <> 18) then
               ' Make sure that this computer is Windows NT-based.
               wscript.echo ip & " is not a Windows XP, Windows 2000, or Windows 2003 Server computer."
          else
               if (objOperatingSystem.Version = "5.0.2195") then
                    ' Windows 2000 SP2, SP3, SP4.
                    if (objOperatingSystem.ServicePackMajorVersion = 2) or (objOperatingSystem.ServicePackMajorVersion = 3) or _
			(objOperatingSystem.ServicePackMajorVersion = 4) then
                         systemType = exeW2k
                    end if

               elseif (objOperatingSystem.Version = "5.1.2600") then
                    ' Windows XP RTM, SP1.
                    if (objOperatingSystem.ServicePackMajorVersion = 0) or (objOperatingSystem.ServicePackMajorVersion = 1) then
                         systemType = exeWinXP
                    end if

               elseif (objOperatingSystem.Version = "5.2.3790") then
                    ' Windows Server 2003 RTM
                    if (objOperatingSystem.ServicePackMajorVersion = 0) then
                         systemType = exeW2k3
                    end if
               end if

               if (systemType = "") then 
                    'This was a Windows NT-based computer, but not with a valid service pack.
                    wscript.echo "Could not patch " & ip & " - unhandled OS version: " & objOperatingSystem.Caption & " SP" & _
				objOperatingSystem.ServicePackMajorVersion & "("& objOperatingSystem.Version & ")"
               end if
          end if

     next

     detectOSPatch = systemType

end function

Eigenschaften

Artikel-ID: 827227 - Geändert am: Montag, 8. August 2005 - Version: 5.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Tablet PC Edition
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
Keywords: 
kbinfo KB827227
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com