Använda ett Visual Basic-skript för att installera säkerhetskorrigering 824146 (MS03-039) eller 823980 (MS03-026) på fjärrvärddatorer

Artikelöversättning Artikelöversättning
Artikel-id: 827227 - Visa produkter som artikeln gäller.
Visa alla | Dölj alla

På den här sidan

Sammanfattning

I den här artikeln ingår ett Microsoft Visual Basic Scripting Edition-skript med beteckningen Patchinstall.vbs. Detta skript är ett exempel på hur en nätverksadministratör kan använda WMI-skript (Windows Management Instrumentation) för att installera säkerhetskorrigering 824146 (MS03-039) eller 823980 (MS03-026) på fjärrvärddatorer som saknar säkerhetskorrigeringen i en domänmiljö med Microsoft Windows NT, Windows 2000 eller Windows Server 2003. I skriptet Patchinstall.vbs används en fil (Ipfile.txt) med IP-adresser som indata, och säkerhetskorrigering 824146 (MS03-039) eller 823980 (MS03-026) installeras från en känd plats på fjärrvärddatorn (C:\Patchinst.exe). Om du vill veta mer om säkerhetskorrigering 824146 (MS03-039) klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
824146 MS03-039: Buffertöverskridning i RPCSS möjliggör körning av skadliga program
Om du vill veta mer om säkerhetskorrigering 823980 klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
823980 MS03-026: Buffertöverskridning i RPC möjliggör körning av kod
Om du vill veta mer om ett verktyg som nätverksadministratörer kan använda för att leta efter datorer i nätverket som saknar dessa säkerhetskorrigeringar, klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
827363 Använda sökverktyget KB 824146 för att identifiera värddatorer som saknar säkerhetskorrigeringarna 823980 (MS03-026) och 824146 (MS03-039)

Obs!

  • Du måste ha administratörsbehörighet på fjärrmåldatorerna för att kunna installera säkerhetskorrigering 824146 eller 823980.
  • För att skriptet Patchinstall.vbs ska kunna användas måste måldatorer med Microsoft Windows XP anslutas till en domän med Windows NT, Windows 2000 eller Windows Server 2003.
  • I skriptet Patchinstall.vbs används WMI (Windows Management Instrumentation), som är beroende av DCOM (Distributed Component Object Model). Därför fungerar inte Patchinstall.vbs på måldatorer där DCOM har inaktiverats för att undvika säkerhetsproblemet som beskrivs i Microsoft-säkerhetsbulletinen MS03-039 eller MS03-026.
  • Säkerhetskorrigeringspaketet 824146 eller 823980 måste finnas i en lokal mapp på datorn där skriptet Patchinstall.vbs körs, och namnet på paketet måste ändras till Patch_XP.exe (för Windows XP), Patch_W2K.exe (för Windows 2000) eller Patch_W2K3.exe (för Windows Server 2003).
  • Du kan ändra skriptet Patchinstall.vbs för installation av andra korrigeringsfiler.

Mer Information

Med skriptet Patchinstall.vbs utförs följande:
  • En lista över IP-adresser till de fjärrvärddatorer där säkerhetskorrigering 824146 eller 823980 ska installeras läses. Denna lista hämtas från en ASCII-textfil (Ipfile.txt) som innehåller en lista över IP-adresser (en IP-adress per rad). Loggfilen Vulnerable.txt från sökverktyget KB824146 kan till exempel användas för filen Ipfile.txt ersätts.
  • Den första IP-adressen från listan hämtas.
  • Måldatorns Windows-version fastställs.
  • Enhet Z på skriptdatorn mappas till C$ på måldatorn.
  • Rätt version av korrigeringsfilen (för Windows XP, Windows 2000 eller Windows Server 2003) kopieras till C:\Patchinst.exe på måldatorn (med hjälp av mappningen för enhet Z).
  • Korrigeringsfilen installeras genom skriptet. Måldatorerna startas om automatiskt utan några åtgärder från användarna eller dialogrutor med hjälp av växlarna -q -f (oövervakat installationsläge).
  • Installationen slutförs.
  • Filen C:\Patchinst.exe tas bort på måldatorn.
  • Mappningen för enhet Z tas bort.
  • Nästa IP-adress i listan bearbetas.
Viktigt! Microsoft rekommenderar att du anpassar detta skriptexempel efter nätverksmiljön och sedan testar skriptet i en testmiljö, innan du använder det i en produktionsmiljö.

När du ska använda skriptet Patchinstall.vbs klistrar du in följande skript i en textfil med namnet Patchinstall.vbs. Kör sedan Patchinstall.vbs med hjälp av följande kommandorad:
cscript patchinstall.vbs Ipfile.txt LocalPathToPatches
I detta kommando är Ipfile.txt en textfil med en lista över IP-adresser till fjärrvärddatorerna där säkerhetskorrigering 824146 eller 823980 ska installeras. LocalPathToPatches är den fullständiga sökvägen till en mapp som innehåller säkerhetskorrigeringspaket 824146 eller 823980 (namnet ändrat till Patch_XP.exe för Windows XP, Patch_W2k.exe för Windows 2000 och Patch_W2k3.exe för Windows Server 2003).

Skriptet Patchinstall.vbs

Microsoft tillhandahåller programmeringsexempel enbart i förklarande syfte och gör inga utfästelser, varken uttryckligen eller underförstått. Detta omfattar men begränsas inte till underförstådd garanti för säljbarhet eller lämplighet för ett visst syfte. I denna artikel förutsätts att du känner till det programmeringsspråk som demonstreras och de verktyg som används för att skapa och felsöka procedurer. Microsofts supporttekniker kan hjälpa till med att förklara funktionen hos en viss procedur, men kan inte ändra dessa exempel för att ge ytterligare funktioner eller skapa procedurer som motsvarar dina speciella behov.
' Patchinstall.vbs
' Skript för installation av korrigeringsfiler för MS03-026 och 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: Du måste köra detta skript med cscript, till exempel 'cscript " & wscript.scriptname & "'."
     wscript.quit 0
end if

' EXEMPEL
if wscript.arguments.count <> 2 then
     wscript.echo "Användning: cscript " & wscript.scriptname & " <IpFile.txt> <LocalPathToPatches>" & vbCrLf & vbCrLf & _
     "  <LocalPathToPatches> måste vara en komplett sökväg till en mapp som innehåller alla dessa filer:" & 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")

' Kontrollera att ipfile kan nås.
set oipFile = ofs.opentextfile(ipFile, 1, false)
if (Err.Number <> 0) then
     wscript.echo "Cannot open " & ipFile
     wscript.quit
end if

' Avsluta med tecknet  \ .
if right(localPathToPatches, 1) <> "\" then
     localPathToPatches = localPathToPatches & "\"
end if

Observera att cim_datafile inte stöder UNC-sökvägar
vilket innebär att allt måste hanteras via mappade enheter.
if left(localPathToPatches, 2) = "\\" then
     wscript.echo "<pathToExecutable> får inte vara en UNC-sökväg, mappa enheten lokalt"
     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

' Kontrollera att korrigeringsfilerna är åtkomliga.
if ((len(exeWinXP) = 0) OR (len(exeW2k) = 0) OR (len(exeW2k3) = 0)) then
     wscript.echo "Det går inte att hitta korrigeringsfilerna."
     wscript.echo "Kontrollera att mappen <LocalPathToPatches> innehåller samtliga följande filer:" & vbCrLf & _
     "      " & XP_Patch & vbCrLf & _ 
     "      " & W2k_Patch & vbCrLf & _ 
     "      " & W2k3_Patch
     wscript.quit
end if


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

'Felhanteringskoden finns nedanför den funktion som kan orsaka fel - kör den.
on error resume next

while not oipFile.atEndOfStream
     ip = oipFile.ReadLine()
     wscript.echo vbCrLf & "Ansluter till " & ip & "..."

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

     if (Err.Number <> 0) then
          wscript.echo "Kunde inte ansluta till " & ip & "."
     else

          exeCorrectPatch = detectOSPatch(osvcRemote)
          if (exeCorrectPatch <> "") then
               ' Lay the bits on the remote computer.
               wscript.echo "Installerar korrigeringsfil " & 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 "Det gick inte att kopiera till " & ip & " - fel: " & ret
               else
                    set oprocess = osvcRemote.Get("win32_process")
     
                    ' Starta installationen utan medverkan av användaren och framtvinga en omstart när den slutförts.
                    ret = oprocess.create("c:\\Patchinst.exe -q -f")
                    if (ret <> 0) then
                         wscript.echo "Det gick inte att starta processen för " & ip & ": " & ret
                    else
                         ' Hämta en referens till filen som kopierades.
                         set odestFile = osvcLocal.get("cim_datafile=""z:\\Patchinst.exe""")

                         ' Vänta på att installationen ska slutföras.
                         for waitTime = 0 to 120     ' Vila och vänta upp till två minuter på att installationen slutförs.
                              wscript.Sleep 1000     ' Vänta en sekund.
                              ' Radera den temporära filen så snart som möjligt efter att den släppts fri.
                              if (odestFile.Delete() = 0) then
                                   exit for
                              end if
                         next ' I annat fall, loopa igen och fortsätt vänta...

                         wscript.echo "Installationen lyckades."

                    end if     'Skapa process lyckades.
               end if     'Kopiering lyckades.

               onet.removenetworkdrive "z:", true
          end if      ' Skriptet vet vilken korrigeringsfil som ska installeras.
     end if ' Kör nästa IP-adress, och därefter nästa IP-adress... 
wend

oipFile.close()

'Rensa upp, ta bort enhetsmappningen (kontrollera den här gången eftersom den kanske inte har mappats).
if ofs.folderexists("z:\") then
     onet.removenetworkdrive "z:", true
end if

wscript.echo vbCrLf & "Korrigering slutförd. Exiting."

function detectOSPatch(osvcRemote)

     set oOSInfo = osvcRemote.InstancesOf("Win32_OperatingSystem")
     'Endast en instans returnseras (det för närvarande aktiva OS:et) även om följande är en foreach.
     för varje objOperatingSystem i oOSInfo

          if (objOperatingSystem.OSType <> 18) then
               ' Kontrollera att datorn är Windows NT-baserad.
               wscript.echo ip & " är inte en datorn med Windows XP, Windows 2000 eller 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 
                    Detta var en Windows NT-baseradd dator, men den saknade ett giltigt Service Pack.
                    wscript.echo "Det gick inte att korrigera " & ip & " - OS-versionen hanteras ej: " & objOperatingSystem.Caption & " SP" & _
				objOperatingSystem.ServicePackMajorVersion & "("& objOperatingSystem.Version & ")"
               end if
          end if

     next

     detectOSPatch = systemType

end function

Egenskaper

Artikel-id: 827227 - Senaste granskning: den 10 augusti 2005 - Revision: 5.4
Informationen i denna artikel gäller:
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Web Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Tablet PC Edition
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
Nyckelord: 
kbinfo KB827227

Ge 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