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.