Cómo utilizar una secuencia de comandos de Visual Basic para instalar las revisiones de seguridad 824146 (MS03-039) u 823980 (MS03-026) en equipos host remotos

Seleccione idioma Seleccione idioma
Id. de artículo: 827227 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Este artículo incluye un ejemplo de secuencia de comandos de Microsoft Visual Basic Scripting Edition denominada Patchinstall.vbs. Esta secuencia de comandos es un ejemplo de cómo un administrador de red puede utilizar el Instrumental de administración de Windows (WMI) para instalar las revisiones de seguridad 824146 (MS03-039) o 823980 (MS03-026) en equipos host remotos que no tengan instaladas estas revisiones, en un entorno de dominio de Microsoft Windows NT, Windows 2000 o Windows Server 2003. La secuencia de comandos del archivo Patchinstall.vbs toma un archivo (Ipfile.txt) que contiene direcciones IP como datos de entrada e instala las revisiones de seguridad 824146 (MS03-039) o 823980 (MS03-026) desde una ubicación conocida en el equipo host remoto (C:\Patchinst.exe). Para obtener información adicional acerca de la revisión de seguridad 824146 (MS03-039), haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824146 MS03-039: Un desbordamiento de búfer en RPCSS podría permitir la ejecución de código
Para obtener información adicional acerca de la revisión de seguridad 823980, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
823980 MS03-026: Un desbordamiento de búfer en la interfaz RPC podría permitir la ejecución de código
Para obtener información adicional acerca de una herramienta que el administrador de red puede utilizar para analizar la red en busca de equipos que no tengan instaladas estas revisiones de seguridad, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
827363 Cómo utilizar la herramienta de análisis KB 824146 para identificar los equipos que no tienen instaladas las revisiones de seguridad 823980 (MS03-026) y 824146 (MS03-039)

Notas

  • Debe tener permisos administrativos en los equipos remotos de destino para poder instalar con éxito las revisiones de seguridad 824146 o 823980.
  • Los equipos de destino basados en Microsoft Windows XP deben estar unidos a un dominio de Windows NT, Windows 2000 o Windows Server 2003, para poder utilizar con éxito la secuencia de comandos Patchinstall.vbs.
  • Esta secuencia de comandos utiliza el Instrumental de administración de Windows (WMI). WMI depende del Modelo de objetos componentes distribuido (DCOM). Por esta razón, la secuencia de comandos Patchinstall.vbs no funciona en equipos de destino en los que DCOM se ha deshabilitado para solucionar temporalmente la vulnerabilidad que se describe en los Boletines de seguridad de Microsoft MS03-039 o MS03-026.
  • Los paquetes de revisión de seguridad 824146 o 823980 deben estar ubicados en una carpeta local del equipo en el que se ejecute la secuencia de comandos Patchinstall.vbs, y el nombre de dicho paquete se debe cambiar a Patch_XP.exe (para Windows XP), Patch_W2K.exe (para Windows 2000) y Patch_W2K3.exe (para Windows Server 2003).
  • Puede modificar la secuencia de comandos Patchinstall.vbs para instalar otras revisiones.

Más información

Esta secuencia de comandos lleva a cabo estas tareas:
  • La secuencia de comandos lee una lista de direcciones IP que corresponden a los equipos remotos en los que se desea instalar las revisiones de seguridad 824146 o 823980. La secuencia de comandos obtiene esta lista de un archivo de texto ASCII (Ipfile.txt) que contiene una lista de direcciones IP (una dirección IP por línea). Por ejemplo, puede utilizar el archivo de registro Vulnerable.txt de la herramienta de análisis KB824146 para el archivo Ipfile.txt.
  • La secuencia de comandos obtiene la primera dirección IP de la lista.
  • A continuación, determina qué versión de Windows se ejecuta en el equipo de destino.
  • Después, asigna la unidad Z del equipo de la secuencia de comandos a C$ en el equipo de destino.
  • Copia la versión correcta de la revisión (para Windows XP, Windows 2000 o Windows Server 2003) en C:\Patchinst.exe, en el equipo de destino (mediante la asignación de la unidad Z).
  • Finalmente, la secuencia de comandos instala la revisión y reinicia automáticamente los equipos de destino sin la participación de ningún usuario ni de ningún cuadro de diálogo, mediante los modificadores -q -f (Modo de instalación desatendida).
  • La secuencia de comandos espera a que se complete la instalación.
  • Intenta borrar el archivo C:\Patchinst.exe del equipo de destino.
  • La secuencia de comandos quita la asignación de la unidad Z.
  • A continuación, procesa la siguiente dirección IP de la lista.
Importante
Microsoft recomienda que modifique esta secuencia de comandos de ejemplo para adaptarla a su entorno de red y, a continuación, la pruebe antes de utilizarla en un entorno de producción.

Para utilizar la secuencia de comandos Patchinstall.vbs, pegue la siguiente secuencia de comandos en un archivo de texto denominado Patchinstall.vbs. A continuación, ejecute la secuencia de comandos Patchinstall.vbs.mediante la siguiente línea de comandos:
cscript patchinstall.vbs Ipfile.txt LocalPathToPatches
En este comando, Ipfile.txt es un archivo de texto que contiene la lista de direcciones IP de los equipos remotos en los que desea instalar las revisiones de seguridad 824146 o 823980. LocalPathToPatches es la ruta completa de una carpeta que contiene los paquetes de revisión de seguridad 824146 o 823980 (renombrados Patch_XP.exe para Windows XP, Patch_W2k.exe para Windows 2000 y Patch_W2k3.exe para Windows Server 2003).

Secuencia de comandos Patchinstall.vbs

Microsoft proporciona ejemplos de programación sólo como explicación, sin ninguna garantía ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje de programación que se muestra, así como las herramientas empleadas para crear y depurar procedimientos. Los profesionales de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas.
' 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

Propiedades

Id. de artículo: 827227 - Última revisión: martes, 16 de agosto de 2005 - Versión: 5.4
La información de este artículo se refiere a:
  • 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
Palabras clave: 
kbinfo KB827227

Enviar comentarios

 

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