Bruke et Visual Basic-skript til å installere sikkerhetsoppdateringen 824146 (MS03-039) eller 823980 (MS03-026) på eksterne vertsdatamaskiner

Artikkeloversettelser Artikkeloversettelser
Artikkel-ID: 827227 - Vis produkter som denne artikkelen gjelder for.
Vis alt | Skjul alt

På denne siden

Sammendrag

Denne artikkelen inneholder et eksempel på et Microsoft Visual Basic Scripting Edition-skript kalt Patchinstall.vbs. Dette skriptet er et eksempel på hvordan en systemansvarlig kan bruke WMA-skripting (Windows Management Instrumentation) til å installere sikkerhetsoppdateringen 824146 (MS03-039) eller 823980 (MS03-026) på eksterne vertsdatamaskiner som ikke har sikkerhetsoppdateringen installert i et Microsoft Windows NT-, Windows 2000- eller Windows Server 2000-domenemiljø. Patchinstall.vbs-skriptet tar en fil (Ipfile.txt) som inneholder IP-adresser som inndata, og installerer sikkerhetsoppdateringen 824146 (MS03-039) eller 823980 (MS03-026) fra en kjent plassering på den eksterne vertsdatamaskinen (C:\Patchinst.exe). Hvis du vil ha mer informasjon om sikkerhetsoppdateringen 824146 (MS03-039), klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
824146 MS03-039: Bufferoverkjøring i RPCSS kan tillate at kode kjøres (Denne artikkelen kan være på engelsk.)
Hvis du vil ha mer informasjon om sikkerhetsoppdatering 823980, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
823980 MS03-026: Bufferoverkjøring i RPC kan tillate at kode kjøres (Denne artikkelen kan være på engelsk.)
Hvis du vil ha mer informasjon om et verktøy som systemansvarlige kan bruke til å skanne nettverket etter datamaskiner som ikke har disse sikkerhetsoppdateringene installert, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
827363 Bruke skanneverktøyet KB 824146 til å identifisere vertsdatamaskiner som ikke har sikkerhetsoppdatering 823980 (MS03-026) installert (Denne artikkelen kan være på engelsk.)

Obs! 

  • Du må ha administrative rettigheter på de eksterne måldatamaskinene for å kunne installere sikkerhetsoppdateringen 824146 eller 823980.
  • Microsoft Windows XP-baserte måldatamaskiner må være knyttet til et Windows NT-, Windows 2000- eller Windows Server 2003-domene for at Patchinstall.vbs-skriptet skal kunne brukes.
  • Patchinstall.vbs-skriptet bruker WMI (Windows Management Instrumentation). WMI avhenger av DCOM (Distributed Component Object Model). Patchinstall.vbs fungerer derfor ikke på måldatamaskiner der DCOM er deaktivert for å løse problemet med sikkerhetsproblemet som tas opp i Microsofts sikkerhetsbulletin MS03-039 eller MS03-026.
  • Sikkerhetsoppdateringspakkene 824146 eller 823980 må ligge i en lokal mappe på datamaskinen der du kjører Patchinstall.vbs-skriptet, og navnet på pakkene må endres til Patch_XP.exe (for Windows XP), Patch_W2K.exe (for Windows 2000) og Patch_W2K3.exe (for Windows Server 2003).
  • Du kan endre Patchinstall.vbs-skriptet for å installere andre oppdateringer.

Mer informasjon

Patchinstall.vbs-skriptet utfører disse oppgavene:
  • Skriptet leser en liste over IP-adresser for de eksterne vertsdatamaskinene der du vil installere sikkerhetsoppdateringen 824146 eller 823980. Skriptet henter denne listen fra en ASCII-tekstfil (Ipfile.txt) som inneholder en liste over IP-adresser (én IP-adresse per linje). Du kan for eksempel bruke loggfilen Vulnerable.txt fra skanneverktøyet KB824146 for Ipfile.txt -loggfilen.
  • Skriptet henter den første IP-adressen fra listen.
  • Skriptet fastslår Windows-versjonen på måldatamaskinen.
  • Skriptet tilordner stasjon Z på skriptdatamaskinen til C$ på måldatamaskinen.
  • Skriptet kopierer den riktige versjonen av oppdateringen (for Windows XP, Windows 2000 eller Windows Server 2003) til C:\Patchinst.exe på måldatamaskinen (ved å bruke tilordning av stasjon Z).
  • Skriptet gjør at oppdateringen blir installert, og deretter startes måldatamaskinene på nytt automatisk uten brukermedvirkning eller dialogbokser ved hjelp av -q -f-bryterne (uovervåket installasjonsmodus).
  • Skriptet venter på at installasjonen skal fullføres.
  • Skriptet prøver å slette filen C:\Patchinst.exe på måldatamaskinen.
  • Skriptet fjerner tilordningen av stasjon Z.
  • Skriptet behandler den neste IP-adressen i listen.
Viktig! Microsoft anbefaler at du endrer dette eksempelskriptet for nettverksmiljøet ditt, og at du deretter tester skriptet i et testmiljø før du bruker det i et produksjonsmiljø.

Hvis du vil bruke Patchinstall.vbs-skriptet, limer du inn følgende skript i en tekstfil kalt Patchinstall.vbs. Kjør deretter Patchinstall.vbs-skriptet ved å bruke følgende kommandolinje:
cscript patchinstall.vbs Ipfile.txt LocalPathToPatches
I denne kommandoen er Ipfile.txt en tekstfil som inneholder en liste over IP-adresser for de eksterne vertsdatamaskinene der du vil installere sikkerhetsoppdateringen 824146 eller 823980. LocalPathToPatches er den fullstendige banen for en mappe som inneholder sikkerhetsoppdateringspakkene 824146 eller 823980 (navn endret til Patch_XP.exe for Windows XP, Patch_W2k.exe for Windows 2000 og Patch_W2k3.exe for Windows Server 2003).

Patchinstall.vbs-skriptet

Programmeringseksemplene som Microsoft bruker, er kun eksempler. Microsoft gir ingen garantier, direkte eller indirekte. Dette inkluderer, men er ikke begrenset til, eventuelle stilltiende garantier om salgbarhet eller anvendelighet for særskilte formål. Denne artikkelen er basert på at du er kjent med programmeringsspråket som brukes, og verktøyene som brukes til å lage og feilsøke prosedyrer. Microsofts kundestøtteteknikere kan være behjelpelige med å forklare funksjonaliteten til en bestemt prosedyre, men de endrer ikke disse eksemplene for å lage forbedret funksjonalitet eller lage prosedyrer som dekker dine spesifikke 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 right(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 oprocess = osvcRemote.Get("win32_process")
     '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

Egenskaper

Artikkel-ID: 827227 - Forrige gjennomgang: 8. august 2005 - Gjennomgang: 5.4
Informasjonen i denne artikkelen gjelder:
  • 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økkelord: 
kbinfo KB827227

Gi tilbakemelding

 

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