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

Résumé

Cet article inclut un exemple de script Microsoft Visual Basic Scripting Edition appelé Patchinstall.vbs. Ce script est un exemple de comment un administrateur réseau peut utiliser Windows Management Instrumentation (WMI) pour installer le 824146 (MS03-039) ou le correctif de sécurité 823980 (MS03-026) sur des ordinateurs qui n’ont pas le correctif est 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 824146 (MS03-039) ou le correctif de sécurité 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 : débordement de tampon dans RPCSS peut permettre l’exécution de code

Pour plus d’informations sur le correctif de 823980 sécurité, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

823980 MS03-026 : débordement de tampon dans 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 pour les ordinateurs qui n’ont pas installés ces correctifs de sécurité, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

827363 comment utiliser l’outil d’analyse KB 824146 pour identifier les ordinateurs hôtes qui n’ont pas 823980 (MS03-026) ou des correctifs de sécurité 824146 (MS03-039) installés

Remarques

  • Vous devez disposer des autorisations d’administration sur les ordinateurs de destination à distance afin d’installer correctement le 824146 ou le correctif de 823980 sécurité.
  • Microsoft ordinateurs de destination 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 de l’objet modèle DCOM (Distributed Component). Par conséquent, le script Patchinstall.vbs ne fonctionne pas sur les ordinateurs de destination où DCOM a été désactivé pour contourner la vulnérabilité corrigée par les Bulletins de sécurité Microsoft MS03-039 et MS03-026.
  • Le 824146 ou les packages de correctifs de 823980 sécurité doivent se trouver dans un dossier local sur l’ordinateur où 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 installer d’autres correctifs.

Plus d'informations

Le script Patchinstall.vbs exécute ces tâches :
  • Le script lit une liste d’adresses IP pour les ordinateurs de l’hôte distant où vous souhaitez installer le 824146 ou le correctif de 823980 sécurité. Le script obtient cette liste à partir d’un fichier texte ASCII (Ipfile.txt) qui contient une liste de l’adresse IP (une adresse IP par ligne). Par exemple, vous pouvez utiliser le fichier journal Vulnerable.txt de le KB824146 outil pour le fichier FichierIP.txt d’analyse.
  • Le script obtient la première adresse IP dans la liste.
  • Le script détermine la version de Windows sur l’ordinateur de destination.
  • Le script 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).
  • Le script provoque le correctif doit être installé et ensuite automatiquement redémarre les ordinateurs de destination sans qu’un utilisateur d’entrée ou des boîtes de dialogue à l’aide de -q-f bascule (mode d’installation sans assistance).
  • Le script attend pour terminer l’installation.
  • Le script tente de supprimer le fichier C:\Patchinst.exe sur l’ordinateur de destination.
  • Le script supprime le mappage du lecteur Z.
  • Il traite l’adresse IP suivante dans la liste.
Important Microsoft recommande que vous modifiez cet exemple de script pour votre environnement réseau, puis testez votre script dans un environnement de 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. Ensuite, exécutez 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 où vous souhaitez installer le 824146 ou le correctif de 823980 sécurité. Chemin_local_aux_correctifs est le chemin d’accès complet d’un dossier qui contient le 824146 ou les packages de correctifs de 823980 sécurité (renommés Patch_XP.exe pour Windows XP, Patch_W2k.exe pour Windows 2000 et Patch_W2k3.exe pour Windows Server 2003).

Le Script Patchinstall.vbs

Microsoft fournit des exemples de programmation à titre d'illustration uniquement, sans garantie expresse ou implicite. Ceci inclut, mais n'est pas limité à, les garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les ingénieurs du support technique Microsoft peuvent vous expliquer les fonctionnalités d'une procédure particulière, mais ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou 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

ID d'article : 827227 - Dernière mise à jour : 27 janv. 2017 - Révision : 2

Commentaires