Sådan bruges et Visual Basic Script til at installere sikkerhedsopdatering 824146 (MS03-039) eller 823980 (MS03-026) på fjerncomputere

Oversættelser af artikler Oversættelser af artikler
Artikel-id: 827227 - Få vist de produkter, som denne artikel refererer til.
Udvid alle | Skjul alle

På denne side

Sammenfatning

Artiklen indeholder et eksempel på et Microsoft Visual Basic Scripting Edition-script med navnet Patchinstall.vbs. Dette script er et eksempel på, hvordan en netværksadministrator kan bruge VMI-scriptfiler (Windows Management Instrumentation) til at installere sikkerhedsopdatering 824146 (MS03-039) eller 823980 (MS03-026) på fjerncomputere, hvor opdateringen ikke er installeret i et Microsoft Windows NT-, Windows 2000- eller Windows Server 2003-domænemiljø. Patchinstall.vbs-scriptet bruger en fil (IP_fil.txt), som indeholder IP-adresser som input og installerer sikkerhedsopdatering 824146 (MS03-039) eller 823980 (MS03-026) fra en kendt placering på fjerncomputeren (C:\Patchinst.exe). Yderligere oplysninger om sikkerhedsopdateringen 824146 (MS03-039) får du ved at klikke på nedenstående artikelnummer for at få vist artiklen i Microsoft Knowledge Base:
824146 MS03-039: Bufferoverløb i RPCSS kan tillade en angriber at køre skadelige programmer
Yderligere oplysninger om sikkerhedsrettelse 823980 finder du ved at klikke på nedenstående artikelnummer for at få vist artiklen i Microsoft Knowledge Base:
823980 MS03-026: Bufferoverløb i RCP-grænseflade kan tillade kørsel af programkode
Yderligere oplysninger om et værktøj, som netværksadministratorer kan bruge til at scanne netværket for at finde de computere, der ikke har disse sikkerhedsopdateringer installeret, får du ved at klikke på nedenstående artikelnummer for at få vist artiklen i Microsoft Knowledge Base:
827363 Sådan bruges KB 824146-scanningsværktøjet til at finde værtscomputere, hvor sikkerhedsopdateringerne 823980 (MS03-026) og 824146 (MS03-039) ikke er installeret (artiklen er evt. på engelsk)

Bemærk!

  • Du skal have administrative rettigheder på fjerncomputerne for at kunne installere sikkerhedsopdatering 824146 eller 823980 korrekt.
  • Microsoft Windows XP-baserede destinationscomputere skal være sluttet til et Windows NT-, Windows 2000- eller Windows Server 2003-domæne, for at Patchinstall.vbs-scriptet kan anvendes korrekt.
  • Patchinstall.vbs-scriptet bruger WMI (Windows Management Instrumentation). WMI er afhængig af DCOM (Distributed Component Object Model). Og derfor fungerer Patchinstall.vbs ikke på destinationscomputere, hvor DCOM er deaktiveret for at omgå den svaghed, der er behandlet i Microsoft-sikkerhedsbulletinen MS03-039 eller MS03-026.
  • Pakken med sikkerhedsopdatering 824146 eller 823980 skal være placeret i en lokal mappe på den computer, hvor du kører Patchinstall.vbs-scriptet, og pakkerne skal omdøbes til Patch_XP.exe (til Windows XP), Patch_W2K.exe (til Windows 2000) og Patch_W2K3.exe (til Windows Server 2003).
  • Du kan redigere Patchinstall.vbs-scriptet for at installere andre opdateringer.

Yderligere Information

Patchinstall.vbs-scriptet udfører følgende:
  • Scriptet læser en liste over IP-adresser til de fjerncomputerne, hvor sikkerhedsopdateringen 824146 eller 823980 skal installeres. Scriptet får listen fra en ASCII-tekstfil (IP_fil.txt), der indeholder en liste over IP-adresser (en IP-adresse pr. linje). Du kan f.eks. bruge logfilen Vulnerable.txt fra scanningsværktøjet KB824146 til filenIP_fil.txt .
  • Scriptet henter den første IP-adresse på listen.
  • Scriptet afgør, hvilken Windows-version der er på destinationscomputeren.
  • Scriptet knytter drev Z på scriptcomputeren til C$ på destinationscomputeren.
  • Scriptet kopierer den korrekte version af opdateringen (til Windows XP, Windows 2000 eller Windows Server 2003) til C:\Patchinst.exe på destinationscomputeren (ved hjælp af drev Z-tilknytningen).
  • Scriptet forårsager, at opdateringen installeres, og at destinationscomputerne derefter genstartes automatisk uden brugerinput eller dialogbokse ved at benytte parametrene -q -f (fuldautomatisk installationstilstand).
  • Scriptet venter på, at installationen fuldføres.
  • Scriptet forsøger at slette filen C:\Patchinst.exe på destinationscomputeren.
  • Scriptet fjerner drev Z-tilknytningen.
  • Scriptet behandler den næste IP-adresse på listen.
Vigtigt! Microsoft anbefaler, at du redigerer dette scripteksempel, så det passer til dit netværksmiljø, og at du derefter afprøver det i et testmiljø, inden du bruger det i et produktionsmiljø.

Hvis du vil benytte scriptet Patchinstall.vbs, skal du indsætte følgende script i en tekstfil med navnet Patchinstall.vbs. Derefter skal du køre scriptet Patchinstall.vbs ved hjælp af følgende kommando:
cscript patchinstall.vbs IP_fil.txt LokalStiTilOpdateringer
I denne kommando erIP_fil.txt en tekstfil, der indeholder en liste over IP-adresser til de fjerncomputerne, hvor sikkerhedsopdateringen 824146 eller 823980 skal installeres. LokalStiTilOpdateringer er den fuldstændige sti til den mappe, hvor pakken med sikkerhedsopdatering 824146 eller 823980 er placeret (omdøbt til Patch_XP.exe til Windows XP, Patch_W2k.exe til Windows 2000 og Patch_W2k3.exe til Windows Server 2003).

Scriptet Patchinstall.vbs

Microsoft leverer kun programmeringseksempler som illustration ? uden nogen form for garanti, det være sig udtrykkelig eller stiltiende. Dette omfatter, men er ikke begrænset til, det stiltiende ansvar for salgbarhed eller egnethed til bestemte formål. Det forudsættes i denne artikel, at du kender ovennævnte programmeringssprog samt de værktøjer, der anvendes til at oprette og foretage fejlfinding i procedurer. Microsofts supportmedarbejdere kan hjælpe med at forklare funktionaliteten i en bestemt procedure, men vil ikke ændre eksemplerne, så de giver yderligere funktionalitet, eller oprette procedurer, der passer specielt til dine behov.
' 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

Egenskaber

Artikel-id: 827227 - Seneste redigering: 9. august 2005 - Redigering: 5.4
Oplysningerne i denne artikel gælder:
  • 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
Nøgleord: 
kbinfo KB827227

Send 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