Beveiligingspatch 824146 (MS03-039) of 823980 (MS03-026) op externe hostcomputers installeren met behulp van een Visual Basic-script

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 827227 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

Dit artikel bevat een voorbeeldscript met de naam Patchinstall.vbs dat is geschreven in Microsoft Visual Basic Scripting Edition. Dit voorbeeldscript laat zien hoe netwerkbeheerders gebruik kunnen maken van Windows Management Instrumentation-scripts (WMI) voor de installatie van beveiligingspatch 824146 (MS03-039) of 823980 (MS03-026) op externe hostcomputers, wanneer de patch niet is geïnstalleerd in een Microsoft Windows NT-, Windows 2000- of Windows Server 2003-domein. Het script Patchinstall.vbs gebruikt een bestand (IP-bestand.txt) met IP-adressen als invoer en installeert beveiligingspatch 824146 (MS03-039) of 823980 (MS03-026) vanaf een bekende locatie op de externe hostcomputer (C:\Patchinst.exe). Klik voor meer informatie over beveiligingspatch 824146 (MS03-039) op het volgende artikelnummer in de Microsoft Knowledge Base:
824146 MS03-039: Bufferoverschrijding in RPCSS kan leiden tot uitvoering van code
Klik voor meer informatie over beveiligingspatch 823980 op het volgende artikelnummer in de Microsoft Knowledge Base:
823980 MS03-026: Bufferoverschrijding in RPC kan leiden tot uitvoering van code
Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over een hulpprogramma waarmee netwerkbeheerders in hun netwerk kunnen zoeken naar computers waarop deze beveiligingspatches niet zijn geïnstalleerd:
827363 Het hulpprogramma voor scannen uit KB824146 gebruiken om hostcomputers te identificeren waarop niet de beveiligingspatches 823980 (MS03-026) of 824146 (MS03-039) zijn geïnstalleerd

Opmerkingen

  • U moet beheerdersrechten op de externe doelcomputers hebben om beveiligingspatch 824146 of 823980 te kunnen installeren.
  • Externe Microsoft Windows XP-computers moeten deel uitmaken van een Windows NT-, Windows 2000- of Windows Server 2003-domein om gebruik te kunnen maken van het script Patchinstall.vbs.
  • Patchinstall.vbs maakt gebruik van Windows Management Instrumentation (WMI). WMI is afhankelijk van het Distributed Component Object Model (DCOM). Daarom werkt Patchinstall.vbs niet op doelcomputers waarop DCOM is uitgeschakeld om het beveiligingslek te omzeilen dat wordt beschreven in de Microsoft-beveiligingsbulletins MS03-039 en MS03-026.
  • Beveiligingspatch 824146 of 823980 moet zich in een lokale map bevinden van de computer waarop u het script Patchinstall.vbs uitvoert en de naam van de pakketten moet worden gewijzigd in Patch_XP.exe (voor Windows XP), Patch_W2K.exe (voor Windows 2000) en Patch_W2K3.exe (voor Windows Server 2003).
  • U kunt het script Patchinstall.vbs wijzigen om andere patches te installeren.

Meer informatie

Patchinstall.vbs voert de volgende taken uit:
  • Het script leest een lijst IP-adressen voor de externe hostcomputers waarop u beveiligingspatch 824146 of 823980 wilt installeren. Het script haalt deze gegevens op uit een ASCII-tekstbestand (IPbestand.txt) dat deze lijst met IP-adressen bevat (één IP-adres per regel). U kunt bijvoorbeeld het logbestand Vulnerable.txt van het hulpprogramma voor scannen KB824146 gebruiken als IP-bestand.txt.
  • Het script haalt het eerste IP-adres op uit de lijst.
  • Het script bepaalt de Windows-versie van de doelcomputer.
  • Het script wijst station Z op de scriptcomputer toe aan C$ op de doelcomputer.
  • Het script kopieert de juiste versie van de patch (voor Windows XP, Windows 2000 of Windows Server 2003) naar C:\Patchinst.exe op de doelcomputer (via de station Z-toewijzing).
  • Via het script wordt de patch geïnstalleerd, waarna de doelcomputers automatisch opnieuw worden gestart door het gebruik van de schakelopties -q -f (installatie zonder toezicht).
  • Het script wacht totdat de installatie is voltooid.
  • Het script verwijdert het bestand C:\Patchinst.exe van de doelcomputer.
  • Het script verwijdert de station Z-toewijzing.
  • Het script gaat verder met het volgende IP-adres uit de lijst.
Belangrijk Microsoft raadt u aan eerst het voorbeeldscript voor uw netwerkomgeving te wijzigen en het script te testen in een testomgeving voordat u het gebruikt in een productieomgeving.

Als u Patchinstall.vbs wilt gebruiken, plakt u het volgende script in een tekstbestand met de naam Patchinstall.vbs. Vervolgens start u Patchinstall.vbs met de volgende opdrachtregel:
cscript patchinstall.vbs IP-bestand.txt LokaalPadNaarPatches
In deze opdracht is IP-bestand.txt een tekstbestand met een lijst IP-adressen voor de externe hostcomputers waarop u beveiligingspatch 824146 of 823980 wilt installeren. LokaalPadNaarPatches is het volledige pad van een map die beveiligingspatch 824146 of 823980 bevat (met de naam Patch_XP.exe voor Windows XP, Patch_W2k.exe voor Windows 2000 en Patch_W2k3.exe voor Windows Server 2003).

Het script Patchinstall.vbs

Microsoft verstrekt deze code zonder enige expliciete of impliciete garantie, daaronder mede begrepen, maar niet beperkt tot impliciete garanties met betrekking tot de verkoopbaarheid en/of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertaal VBScript, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. U kunt desgewenst contact opnemen met Microsoft Product Support Services voor uitleg over de functie van een bepaalde procedure. Microsoft Product Support Services is echter niet bereid de voorbeelden aan te passen om extra functies toe te voegen of om procedures te maken die aan uw specifieke eisen voldoen.
' Patchinstall.vbs
'Patch-installatiescript voor MS03-026 en 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: Voer dit script uit met behulp van cscript, bijvoorbeeld 'cscript " & wscript.scriptnaam & "'."
     wscript.quit 0
end if

'GEBRUIK
if wscript.arguments.count <> 2 then
     wscript.echo "Usage: cscript " & wscript.scriptname & " <IpFile.txt> <LocalPathToPatches>" & vbCrLf & vbCrLf & _
     "  <LocalPathToPatches> moet het volledige pad zijn naar een map die al deze bestanden bevat:" & 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")

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

' Controleren of het laatste teken een backslash (\) is.
if right(localPathToPatches, 1) <> "\" then
     localPathToPatches = localPathToPatches & "\"
end if

'Houd er rekening mee dat in cim_datafile geen UNC-paden worden ondersteund.
'Alles moet dus via toegewezen stations verlopen.
if left(localPathToPatches, 2) = "\\" then
     wscript.echo "<pathToExecutable> kan geen UNC-pad zijn, wijs een station lokaal toe"
     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

' Controleren of de patches toegankelijk zijn.
if ((len(exeWinXP) = 0) OR (len(exeW2k) = 0) OR (len(exeW2k3) = 0)) then
     wscript.echo "Kan geen patchbestanden vinden."
     wscript.echo "Controleer of de map <LocalPathToPatches> al deze bestanden bevat:" & vbCrLf & _
     "      " & XP_Patch & vbCrLf & _
     "      " & W2k_Patch & vbCrLf & _
     "      " & W2k3_Patch
     wscript.quit
end if


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

'De foutafhandelingscode staat onder de functie die er een kan veroorzaken - voer deze uit.
on error resume next

while not oipFile.atEndOfStream
     ip = oipFile.ReadLine()
     wscript.echo vbCrLf & "Verbinding maken met " & ip & "..."

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

     if (Err.Number <> 0) then
          wscript.echo "Kan geen verbinding maken met " & ip & "."
     else

          exeCorrectPatch = detectOSPatch(osvcRemote)
          if (exeCorrectPatch <> "") then
               ' De onderdelen overbrengen naar de externe 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
                    ' Er is een fout ontdekt en de fout was niet 'bestand bestaat al'.
                    wscript.echo "Kan niet kopiëren naar " & ip & " - fout: " & ret
               else
                    set oprocess = osvcRemote.Get("win32_process")
     
                    ' De installatie starten zonder tussenkomst van de gebruiker en de computer opnieuw opstarten na voltooiing.
                    ret = oprocess.create("c:\\Patchinst.exe -q -f")
                    if (ret <> 0) then
                         wscript.echo "Kan proces niet starten voor " & ip & ": " & ret
                    else
                         ' Een referentie naar het gekopieerde bestand verkrijgen.
                         set odestFile = osvcLocal.get("cim_datafile=""z:\\Patchinst.exe""")

                         ' Wachten tot de installatie is voltooid.
                         for waitTime = 0 to 120     ' Wacht maximaal twee minuten tot de installatie is voltooid.
                              wscript.Sleep 1000     ' Eén seconde slaapstand.
                              ' Tijdelijk bestand zo snel mogelijk verwijderen nadat het niet meer nodig is.
                              if (odestFile.Delete() = 0) then
                                   exit for
                              end if
                         next 'Anders een nieuwe lus starten en blijven wachten...

                         wscript.echo "Installatie geslaagd."

                    end if     'Aanmaakproces is voltooid.
               end if     'Kopiëren is voltooid.

               onet.removenetworkdrive "z:", true
          end if      ' Het script weet welke patch moet worden geïnstalleerd.
     end if ' Verdergaan met het volgende IP-adres, en dan het volgende IP-adres... 
wend

oipFile.close()

'Opschonen, stationstoewijzing verwijderen (nu controleren, omdat het station mogelijk niet is toegewezen).
if ofs.folderexists("z:\") then
     onet.removenetworkdrive "z:", true
end if

wscript.echo vbCrLf & "Patching voltooid. Wordt afgesloten."

function detectOSPatch(osvcRemote)

     set oOSInfo = osvcRemote.InstancesOf("Win32_OperatingSystem")
     'Er wordt maar één exemplaar geretourneerd (het actieve besturingssysteem), ook als het volgende een foreach-constructie is.
     for each objOperatingSystem in oOSInfo

          if (objOperatingSystem.OSType <> 18) then
               ' Controleren of dit een computer met Windows NT is.
               wscript.echo ip & " is geen computer met Windows XP, Windows 2000 of Windows 2003 Server."
          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
                    'Dit is een computer met Windows NT, maar zonder geldig Service Pack.
                    wscript.echo "Kan geen patch uitvoeren voor " & ip & " - niet-verwerkte versie besturingssysteem: " & objOperatingSystem.Caption & " SP" & _
				objOperatingSystem.ServicePackMajorVersion & "("& objOperatingSystem.Version & ")"
               end if
          end if

     next

     detectOSPatch = systemType

end function

Eigenschappen

Artikel ID: 827227 - Laatste beoordeling: maandag 8 augustus 2005 - Wijziging: 5.4
De informatie in dit artikel is van toepassing op:
  • 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
Trefwoorden: 
kbinfo KB827227

Geef ons feedback

 

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