Bloquear el Service Pack 2 de Windows XP

The Scripting Guys, Microsoft Corporation

Esta secuencia de comandos se puede utilizar para bloquear o desbloquear de forma remota la distribución del Service Pack 2 (SP2) de Windows XP desde el sitio Web de Windows Update o a través de Actualizaciones automáticas. La capacidad de bloquear la distribución de SP2 de Windows XP sólo estará disponible durante un período de tiempo limitado. Para obtener información sobre la fecha de vencimiento y sobre cómo deshabilitar temporalmente la distribución de Service Pack 2 a través de Windows Update y Actualizaciones automáticas, consulte http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2aumng.mspx.

Para utilizar la secuencia de comandos, copie el código, péguelo en el Bloc de notas y después guarde la secuencia de comandos con una extensión de archivo .vbs (por ejemplo, bloquearsp2xp.vbs). Cuando ejecute la secuencia de comandos, escriba el nombre de la secuencia de comandos seguido de un parámetro: /b para bloquear o /u para desbloquear. También puede incluir el nombre de un equipo remoto como segundo parámetro. Si no se especifica un equipo remoto, la secuencia de comandos se ejecuta en el equipo local. Por ejemplo:

cscript bloquearsp2xp.vbs /b cliente1

Si el host de la secuencia de comandos predeterminado en el equipo es Cscript.exe, puede omitirse el comando "cscript" inicial.

Código de secuencia de comandos

' Copyright (c) Microsoft Corporation 2004
' File:       BlockXPSP2.vbs
' Contents:   Remotely blocks or unblocks the delivery of
' Windows XP SP2 from Windows Update web site or via Automatic
' Updates. 
' History:    8/20/2004   Peter Costantini   Created
' Version:    1.0

On Error Resume Next

' Define constants and global variables.
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "." ' Can be changed to name of remote computer.
strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate"
strEntryName = "DoNotAllowXPSP2"
dwValue = 1

' Handle command-line arguments.
Set colArgs = WScript.Arguments
If colArgs.Count = 0 Then
  ShowUsage
Else
  If colArgs.Count = 2 Then
    strComputer = colArgs(1)
  End If
' Connect with WMI service and StdRegProv class.
  Set objReg = GetObject _
   ("winmgmts:{impersonationLevel=impersonate}!\\" & _
     strComputer & "\root\default:StdRegProv")
  If Err = 0 Then
    If (LCase(colArgs(0)) = "/b") Or _
     (LCase(colArgs(0)) = "-b" ) Then
      AddBlock
    ElseIf (LCase(colArgs(0)) = "/u") Or _
     (LCase(colArgs(0)) = "-u") Then
      RemoveBlock
    Else
      ShowUsage
    End If
  Else
    WScript.Echo "Unable to connect to WMI service on " _
     & strComputer & "."
  End If
  Err.Clear
End If

'*************************************************************

Sub AddBlock

'Check whether WindowsUpdate subkey exists.
strParentPath = "SOFTWARE\Policies\Microsoft\Windows"
strTargetSubKey = "WindowsUpdate"
intCount = 0
intReturn1 = objReg.EnumKey(HKEY_LOCAL_MACHINE, _
 strParentPath, arrSubKeys)
If intReturn1 = 0 Then
  For Each strSubKey In arrSubKeys
    If strSubKey = strTargetSubKey Then
      intCount = 1
    End If
  Next
  If intCount = 1 Then
    SetValue
  Else
    WScript.Echo "Unable to find registry subkey " & _
     strTargetSubKey & ". Creating ..."
    intReturn2 = objReg.CreateKey(HKEY_LOCAL_MACHINE, _
     strKeyPath)
    If intReturn2 = 0 Then
      SetValue
    Else
      WScript.Echo "ERROR: Unable to create registry " & _
       "subkey " & strTargetSubKey & "."
    End If
  End If
Else
  WScript.Echo "ERROR: Unable to find registry path " & _
   strParentPath & "."
End If

End Sub

'*************************************************************

Sub SetValue

intReturn = objReg.SetDWORDValue(HKEY_LOCAL_MACHINE, _
 strKeyPath, strEntryName, dwValue)
If intReturn = 0 Then
  WScript.Echo "Added registry entry to block Windows XP " & _
   "SP2 deployment via Windows Update or Automatic Update."
Else
  WScript.Echo "ERROR: Unable to add registry entry to " & _
   "block Windows XP SP2 deployment via Windows Update " & _
   "or Automatic Update."
End If

End Sub

'*************************************************************

Sub RemoveBlock

intReturn = objReg.DeleteValue(HKEY_LOCAL_MACHINE, _
 strKeyPath, strEntryName)
If intReturn = 0 Then
  WScript.Echo "Deleted registry entry " & strEntryName & _
   ". Unblocked Windows XP SP2 deployment via Windows " & _
   "Update or Automatic Update."
Else
  WScript.Echo "Unable to delete registry entry " & _
   strEntryName & ". Windows XP SP2 deployment via " & _
   "Windows Update or Automatic Update is not blocked."
End If

End Sub

'*************************************************************

Sub ShowUsage

WScript.Echo "Usage:" & VbCrLf & _
 "  BlockXPSP2.vbs { /b | /u | /? } [hostname]" & VbCrLf & _
 "    /b = Block (deny) Windows XP Service Pack 2 " & _
 "deployment" & VbCrLf & _
 "    /u = Unblock (allow) Windows XP Service Pack 2 " & _
 "deployment" & VbCrLf & _
 "    /? = Show usage" & VbCrLf & _
 "    hostname = Optional. Name of remote computer. " & _
 "Default is local computer" & VbCrLf & _
 "Example:" & VbCrLf & _
 "  BlockXPSP2.vbs /b client1"

End Sub

Para obtener asistencia técnica en línea, inscríbase en la comunidad microsoft.public.windows.server.scripting en el servidor de noticias msnews.microsoft.com. Para proporcionar comentarios o informar de errores en las secuencias de comandos de ejemplo o la guía de secuencias de comandos, póngase en contacto con Microsoft TechNet.

Renuncia

Esta secuencia de comandos de ejemplo no dispone de soporte bajo ningún programa o servicio de soporte estándar de Microsoft. La secuencia de comandos de ejemplo se proporciona TAL CUAL sin garantía de ningún tipo. Microsoft renuncia a todas las garantías implícitas, incluyendo, pero sin limitarse a, las garantías implícitas de comerciabilidad o idoneidad para un determinado fin. Usted asume todo riesgo que surja de la utilización o ejecución de las secuencias de comandos de ejemplo y de la documentación. En ningún caso Microsoft, sus autores o cualquier otra persona implicada en la creación, producción o distribución de las secuencias de comandos serán responsables por ningún daño cualquiera que sea (incluyendo sin limitación, daños por pérdida de beneficios, interrupción de negocios, pérdida de información comercial o cualquier otra pérdida pecuniaria) que pudiere surgir del uso o imposibilidad de uso de las secuencias de comandos o la documentación, aun en el caso de que se hubiera informado a Microsoft de la posibilidad de dichos daños.


Principio de la páginaPrincipio de la página