Al momento sei offline in attesa che la connessione Internet venga ristabilita

Utilizzo di uno script Visual Basic per installare la patch di protezione 824146 (MS03-039) o 823980 (MS03-026) su computer host remoti

Il supporto per Windows XP è terminato

Il supporto Microsoft per Windows XP è terminato l'8 aprile 2014. Questa modifica ha interessato gli aggiornamenti software e le opzioni di sicurezza. Ulteriori informazioni su come continuare a essere protetti.

Il supporto per Windows Server 2003 è terminato il 14 luglio 2015.

Microsoft ha sospeso il supporto per Windows Server 2003 in data 14 luglio 2015. Questa modifica ha interessato gli aggiornamenti software e le opzioni di sicurezza. Ulteriori informazioni su come continuare a essere protetti.

Sommario
In questo articolo viene fornito uno script VBScript (Microsoft Visual Basic Scripting Edition) di esempio, denominato Patchinstall.vbs, per illustrare come un amministratore di rete possa utilizzare le funzionalità di script WMI (Windows Management Instrumentation) per installare la patch di protezione 824146 (MS03-039) oppure 823980 (MS03-026) su computer host remoti privi di tale patch in un ambiente di dominio Microsoft Windows NT, Windows 2000 o Windows Server 2003. Lo script Patchinstall.vbs accetta come input un file (Ipfile.txt) contenente indirizzi IP e installa la patch di protezione 824146 (MS03-039) o 823980 (MS03-026) da una posizione nota sul computer host remoto (C:\Patchinst.exe). Per ulteriori informazioni sulla patch di protezione 824146 (MS03-039), fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
824146 MS03-039: Un sovraccarico del buffer in RPCSS potrebbe consentire a un utente malintenzionato di eseguire programmi dannosi
Per ulteriori informazioni sulla patch di protezione 823980, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
823980 MS03-026: Il sovraccarico di un buffer in RPC può consentire l'esecuzione di codice
Per ulteriori informazioni su uno strumento che consente agli amministratori di rete di rilevare la presenza in rete di computer in cui non sono installate queste patch di protezione, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
827363 Utilizzo dello strumento di scansione KB 824146 per individuare i computer host in cui non sono installate le patch di protezione 823980 (MS03-026) e 824146 (MS03-039)

Note

  • È necessario disporre di autorizzazioni amministrative per i computer di destinazione remoti per installare la patch di protezione 824146 o 823980.
  • I computer di destinazione basati su Microsoft Windows XP devono appartenere a un dominio Windows NT, Windows 2000 o Windows Server 2003 per poter utilizzare lo script Patchinstall.vbs.
  • Lo script Patchinstall.vbs utilizza Windows Management Instrumentation (WMI), che dipende dal modello DCOM (Distributed Component Object Model). Pertanto, Patchinstall.vbs non funziona sui computer di destinazione in cui DCOM è stato disabilitato per ovviare al problema di protezione descritto nel Microsoft Security Bulletin MS03-039 o MS03-026.
  • Il pacchetto della patch di protezione 824146 o 823980 deve trovarsi in una cartella locale sul computer in cui viene eseguito lo script Patchinstall.vbs e deve essere rinominato Patch_XP.exe (per Windows XP), Patch_W2K.exe (per Windows 2000) e Patch_W2K3.exe (per Windows Server 2003).
  • È possibile modificare lo script Patchinstall.vbs per installare altre patch.
Informazioni
Nel corso dell'esecuzione dello Patchinstall.vbs vengono effettuate le seguenti operazioni:
  • Viene letto un elenco degli indirizzi IP dei computer host remoti sui quali si desidera installare la patch di protezione 824146 o 823980. Questo elenco viene recuperato da un file di testo ASCII (Ipfile.txt) contenente un elenco di indirizzi IP (un indirizzo IP per ciascuna riga). È possibile ad esempio utilizzare il file registro Vulnerable.txt generato dallo strumento di scansione KB824146 per il file Ipfile.txt .
  • Viene recuperato il primo indirizzo IP dell'elenco.
  • Viene determinata la versione di Windows presente nel computer di destinazione.
  • L'unità Z del computer in cui viene eseguito lo script viene mappata a C$ nel computer di destinazione.
  • Viene copiata la versione corretta del percorso (per Windows XP, Windows 2000 o Windows Server 2003) in C:\Patchinst.exe sul computer di destinazione, utilizzando il mapping dell'unità Z.
  • La patch viene installata e il computer di destinazione viene riavviato automaticamente utilizzando i parametri -q -f (modalità di installazione automatica).
  • L'installazione viene portata a termine.
  • Viene eliminato il file C:\Patchinst.exe nel computer di destinazione.
  • Viene rimosso il mapping dell'unità Z.
  • Viene elaborato l'indirizzo IP successivo dell'elenco.
Importante Microsoft raccomanda di modificare questo script di esempio per il proprio ambiente di rete e quindi di verificarlo in un ambiente di test prima di utilizzarlo in un ambiente produttivo.

Per utilizzare Patchinstall.vbs script, incollare lo script riportato di seguito in un file di testo denominato Patchinstall.vbs, quindi eseguire lo script Patchinstall.vbs utilizzando la seguente riga di comando:
cscript patchinstall.vbs Ipfile.txt LocalPathToPatches
In questo comando Ipfile.txt è un file di testo che contiene un elenco degli indirizzi IP dei computer host remoti sui quali si desidera installare la patch di protezione 824146 o 823980. LocalPathToPatches è il percorso completo di una cartella che contiene il pacchetto della patch di protezione 824146 o 823980, rinominato Patch_XP.exe per Windows XP, Patch_W2k.exe per Windows 2000 e Patch_W2k3.exe per Windows Server 2003.

Script Patchinstall.vbs

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare procedura, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare procedure atte a soddisfare specifiche esigenze.
' Patchinstall.vbs' Patch installation script for MS03-026 and MS03-039' (c) Microsoft 2003' v1.03 clon error resume nextconst 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 0end if' USAGEif 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.quitend ifipFile = 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.quitend 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.quitend ifexeWinXP = ofs.getfile(localPathToPatches + XP_Patch).nameexeW2k = ofs.getfile(localPathToPatches + W2k_Patch).nameexeW2k3 = 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.quitend ifset osvcLocal = getobject("winmgmts:root\cimv2")'The error-handling code is below the function that may throw one - execute it.on error resume nextwhile 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... wendoipFile.close()'Clean up, remove drive mapping (check this time, because it may not have been mapped).if ofs.folderexists("z:\") then     onet.removenetworkdrive "z:", trueend ifwscript.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 = systemTypeend function
Proprietà

ID articolo: 827227 - Ultima revisione: 08/16/2005 17:25:06 - Revisione: 5.4

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

  • kbinfo KB827227
Feedback