Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Comment faire pour utiliser un script Visual Basic pour installer le correctif de sécurité 824146 (MS03-039) ou 823980 (MS03-026) sur des ordinateurs hôtes distants

Le support de Windows XP a pris fin

Microsoft a mis fin au support de Windows XP le 8 avril 2014. Cette modification a affecté vos mises à jour logicielles et options de sécurité. Découvrez les implications de ce changement à votre niveau et la marche à suivre pour rester protégé.

Le support de Windows Server 2003 a pris fin le 14 juillet 2015

Microsoft a mis fin au support de Windows Server 2003 le 14 juillet 2015. Cette modification a affecté vos mises à jour logicielles et options de sécurité. Découvrez les implications de ce changement à votre niveau et la marche à suivre pour rester protégé.

Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).
Résumé
Cet article contient un exemple de script Microsoft Visual Basic Scripting Edition appelé Patchinstall.vbs. Il s'agit d'un exemple de la façon dont un administrateur réseau peut utiliser un script Windows Management Instrumentation (WMI) pour installer le correctif de sécurité 824146 (MS03-039) ou 823980 (MS03-026) sur des ordinateurs hôtes distants sur lesquels le correctif n'est pas installé, dans un environnement de domaine Microsoft Windows NT, Windows 2000 ou Windows Server 2003. Le script Patchinstall.vbs prend un fichier (Ipfile.txt) qui contient des adresses IP en tant qu'entrée et installe le correctif de sécurité 824146 (MS03-039) ou 823980 (MS03-026) à partir d'un emplacement connu sur l'ordinateur hôte distant (C:\Patchinst.exe). Pour plus d'informations sur le correctif de sécurité 824146 (MS03-039), cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824146 MS03-039 : Une saturation de la mémoire tampon dans le service RPC Windows (RPCSS) risque de permettre l'exécution d'un code
Pour plus d'informations sur le correctif de sécurité 823980, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
823980 MS03-026 : Une saturation de la mémoire tampon dans l’interface RPC peut permettre l'exécution de code
Pour plus d'informations sur un outil qui permet aux administrateurs réseau d'analyser leur réseau à la recherche d'ordinateurs sur lesquels ces correctifs de sécurité ne sont pas installés, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
827363 Comment faire pour utiliser l'outil d'analyse KB 824146 pour identifier les ordinateurs hôtes qui n'ont pas les correctifs de sécurité 823980 (MS03-026) et 824146 (MS03-039) installés

Remarques

  • Pour pouvoir installer le correctif de sécurité 824146 ou 823980, vous devez posséder des autorisations administratives sur les ordinateurs distants de destination.
  • Les ordinateurs de destination Microsoft Windows XP doivent appartenir à un domaine Windows NT, Windows 2000 ou Windows Server 2003 pour pouvoir utiliser le script Patchinstall.vbs.
  • Le script Patchinstall.vbs utilise Windows Management Instrumentation (WMI). WMI dépend du modèle d'objet DCOM (Distributed Component Object Model). Par conséquent, le script Patchinstall.vbs ne fonctionne pas sur les ordinateurs de destination sur lesquels DCOM a été désactivé en vue de contourner le problème abordé dans les Bulletins de sécurité Microsoft MS03-039 et MS03-026.
  • Le package de correctif de sécurité 824146 ou 823980 doit se trouver dans un dossier local sur l'ordinateur sur lequel vous exécutez le script Patchinstall.vbs et il doit être renommé Patch_XP.exe (pour Windows XP), Patch_W2K.exe (pour Windows 2000) ou Patch_W2K3.exe (pour Windows Server 2003).
  • Vous pouvez modifier le script Patchinstall.vbs pour qu'il installe d'autres correctifs.
Plus d'informations
Le script Patchinstall.vbs exécute les tâches suivantes :
  • Il lit une liste d'adresses IP correspondant aux ordinateurs hôtes distants sur lesquels vous souhaitez installer le correctif de sécurité 824146 ou 823980. Il obtient cette liste à partir d'un fichier texte ASCII (Ipfile.txt) qui contient une liste d'adresses IP (une par ligne). Vous pouvez par exemple utiliser le fichier journal Vulnerable.txt de l'outil d'analyse KB824146 pour le fichier Ipfile.txt.
  • Il obtient la première adresse IP de la liste.
  • Il détermine la version de Windows installée sur l'ordinateur de destination.
  • Il mappe le lecteur Z de l'ordinateur source sur C$ sur l'ordinateur de destination.
  • Il copie la version correcte du correctif (pour Windows XP, Windows 2000 ou Windows Server 2003) vers C:\Patchinst.exe sur l'ordinateur de destination (à l'aide du mappage du lecteur Z).
  • Il provoque l'installation du correctif, puis redémarre automatiquement les ordinateurs de destination sans intervention de l'utilisateur ni boîte de dialogue à l'aide des paramètres de ligne de commande -q -f (mode Installation sans assistance).
  • Il attend que l'installation soit achevée.
  • Il essaie de supprimer le fichier C:\Patchinst.exe sur l'ordinateur de destination.
  • Il supprime le mappage du lecteur Z.
  • Il traite l'adresse IP suivante dans la liste.
Important Microsoft vous recommande de modifier et d'adapter cet exemple de script à votre environnement réseau, puis de tester votre script dans un environnement test avant de l'utiliser dans un environnement de production.

Pour utiliser le script Patchinstall.vbs, collez le script suivant dans un fichier texte appelé Patchinstall.vbs. Exécutez ensuite le script Patchinstall.vbs à l'aide de la ligne de commande suivante :
cscript patchinstall.vbs Ipfile.txt chemin_local_aux_correctifs
Dans cette commande, Ipfile.txt est un fichier texte qui contient une liste d'adresses IP correspondant aux ordinateurs hôtes distants sur lesquels vous souhaitez installer le correctif de sécurité 824146 ou 823980. chemin_local_aux_correctifs est le chemin d'accès complet à un dossier qui contient le package de correctif de sécurité 824146 ou 823980 (renommé Patch_XP.exe pour Windows XP, Patch_W2k.exe pour Windows 2000 et Patch_W2k3.exe pour Windows Server 2003).

Script Patchinstall.vbs

Microsoft fournit des exemples de programmation à des fins d'illustration uniquement, sans garantie explicite ou implicite. Ceci inclut, de manière non limitative, les garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du Support technique Microsoft peuvent vous expliquer les fonctionnalités d'une procédure particulière, mais ils ne peuvent pas modifier les exemples en vue de vous fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques.
' 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
Propriétés

ID d'article : 827227 - Dernière mise à jour : 08/08/2005 17:57:55 - Révision : 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 Professionnel, Microsoft Windows 2000 Server

  • kbinfo KB827227
Commentaires
cking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" om/c.gif?DI=4050&did=1&t=">