Você está offline; aguardando reconexão

Como usar um script do Visual Basic para instalar os patches de segurança 824146 (MS03-039) ou 823980 (MS03-026) em computadores host remotos

O suporte para o Windows XP terminou

A Microsoft terminou o suporte para o Windows XP em 8 de abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

O suporte para o Windows Server 2003 termina em 14 de julho de 2015.

A Microsoft terminou o suporte para o Windows Server 2003 em 14 de julho de 2015. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

Sumário
Este artigo inclui um script de exemplo do Microsoft Visual Basic Scripting Edition chamado Patchinstall.vbs. Esse script é um exemplo de como um administrador de rede pode usar o script do WMI (instrumentação de gerenciamento do Windows) para instalar o patches de segurança 824146 (MS03-039) ou 823980 (MS03-026) em computadores host remotos que não possuam o patch instalado em um ambiente de domínio do Microsoft Windows NT, Windows 2000 ou Windows Server 2003. O script Patchinstall.vbs usa um arquivo (Ipfile.txt) que contém endereços IP como entrada e instala os patches de segurança 824146 (MS03-039) ou 823980 (MS03-026) a partir de um local conhecido no computador host remoto (C:\Patchinst.exe). Para obter informações adicionais sobre o patch de segurança 824146 (MS03-039), clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:
824146 MS03-039: Uma saturação do buffer no RPCSS poderia permitir a um invasor a execução de programas maliciosos
Para obter informações adicionais sobre o patch de segurança 823980, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:
823980 MS03-026: Saturação do buffer em RPC pode permitir a execução do código
Para obter informações adicionais sobre uma ferramenta que os administradores de rede podem usar para verificar em sua rede computadores que não possuem esses patches de segurança instalados, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:
827363 Como usar a ferramenta de exame KB 824146 para identificar computadores host que não possuem os patches de segurança 823980 (MS03-026) e 824146 (MS03-039) instalados

Observações

  • Você deve ter permissões administrativas nos computadores remotos de destino para instalar corretamente os patches de segurança 824146 ou 823980.
  • Computadores de destino com Microsoft Windows XP devem estar juntos a um domínio Windows NT, Windows 2000, ou Windows Server 2003 para usarem corretamente o script Patchinstall.vbs.
  • O script Patchinstall.vbs usa o WMI (instrumentação de gerenciamento do Windows). O WMI depende do DCOM (Distributed Component Object Model). Por isso, o Patchinstall.vbs não funciona em computadores de destino em que o DCOM foi desativado como solução alternativa da vulnerabilidade apresentada pelos boletins de segurança da Microsoft MS03-039 ou MS03-026.
  • Os pacotes dos patches de segurança 824146 ou 823980 devem estar localizados em uma pasta local no computador em que o script Patchinstall.vbs será executado, e esses pacotes devem ser renomeados para Patch_XP.exe (para Windows XP), Patch_W2K.exe (para Windows 2000), e Patch_W2K3.exe (para Windows Server 2003).
  • Você pode modificar o script Patchinstall.vbs para instalar outros patches.
Mais Informações
O script Patchinstall.vbs executa as seguintes tarefas:
  • O script lê uma lista de endereços IP para computadores host remotos em que você deseja instalar os patches de segurança 824146 ou 823980. Esse script é obtido a partir de um arquivo de texto ASCII (Ipfile.txt) que contém uma lista de endereços IP (um endereço IP por linha). Por exemplo, você pode usar o arquivo de log Vulnerable.txt da ferramenta de verificação KB824146 para o arquivo Ipfile.txt .
  • O script obtém o primeiro endereço IP da lista.
  • O script determina a versão do Windows no computador de destino.
  • O script mapeia a unidade Z no computador de script para C$ no computador de destino.
  • O script copia a versão correta do patch (para Windows XP, Windows 2000 ou Windows Server 2003) para C:\Patchinst.exe no computador de destino (usando o mapeamento da unidade Z).
  • O script faz com que o patch seja instalado e reinicia automaticamente os computadores de destino sem nenhuma entrada do usuário ou caixa de diálogo usando as opções -q -f (Modo de instalação autônomo).
  • O script aguarda o término da instalação.
  • O script tenta excluir o arquivo C:\Patchinst.exe no computador de destino.
  • O script remove o mapeamento da unidade Z.
  • O script processa o próximo endereço IP na lista.
Importante A Microsoft recomenda que você modifique esse script de exemplo para seu ambiente de rede e teste-o em um ambiente de teste antes de usá-lo em um ambiente de produção.

Para usar o script Patchinstall.vbs, cole o seguinte script em um arquivo de texto chamado Patchinstall.vbs. Em seguida, execute o script Patchinstall.vbs usando a seguinte linha de comando:
cscript patchinstall.vbsIpfile.txt LocalPathToPatches
Neste comando, Ipfile.txt é um arquivo de texto que apresenta uma lista de endereços IP para computadores host remotos em que você deseja instalar os patches de segurança 824146 ou 823980. LocalPathToPatches é o caminho completo de uma pasta que contém os pacotes dos patches de segurança 824146 ou 823980 (renomeados para Patch_XP.exe no Windows XP, Patch_W2k.exe no Windows 2000, e Patch_W2k3.exe no Windows Server 2003).

O script Patchinstall.vbs

A Microsoft fornece exemplos de programação apenas por questões ilustrativas, sem garantias expressas ou implícitas. Isso inclui, mas não está limitado às garantias implícitas de comercialização ou adequação a um propósito específico. Esse artigo presume que você conheça a linguagem de programação que está sendo demonstrada e também as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades.
' 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
Propriedades

ID do Artigo: 827227 - Última Revisão: 08/09/2005 02:30:15 - Revisão: 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
Comentários
html>l>