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

Traductions disponibles Traductions disponibles
Numéro d'article: 827227 - Voir les produits auxquels s'applique cet article
Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).
Agrandir tout | Réduire tout

Sommaire

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 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

Propriétés

Numéro d'article: 827227 - Dernière mise à jour: lundi 8 août 2005 - Version: 5.4
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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
Mots-clés : 
kbinfo KB827227
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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