封鎖 Windows XP Service Pack 2

Microsoft Corporation 的 The Scripting Guys

此指令碼可遠端封鎖或解除封鎖從 Windows Update 網站或透過「自動更新」傳送 Windows XP Service Pack 2 (SP2) 的動作。封鎖 Windows XP SP2 的傳送動作是有時間限制的。如需暫時停用透過 Windows Update 及「自動更新」傳送 Service Pack 2 之過期日及詳細資料的相關資訊,請參閱 https://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2aumng.mspx (英文)。

若要使用指令碼,請複製程式碼,將它貼入 [記事本],然後將指令碼儲存為 .vbs 副檔名 (例如 blockxpsp2.vbs)。執行指令碼時,請在指令碼名稱後面加上參數:若要封鎖,請使用 /b,若要解除封鎖,請使用 /u。您也可以選擇包括遠端電腦名稱作為第二個參數。如果不指定遠端電腦,指令碼就會在本機電腦上執行。例如:

cscript blockxpsp2.vbs /b client1

如果電腦上的預設指令碼主機是 Cscript.exe,就可以省略開頭的 "cscript"。

指令碼

' 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

如需線上對等支援,請加入 msnews.microsoft.com 新聞伺服器上的 microsoft.public.windows.server.scripting (英文) 社群。若您想要對範例指令碼或指令碼指南,提供意見、回報問題,請與 Microsoft TechNet (英文) 連絡。

免責聲明

此範例指令碼不支援任何 Microsoft 標準技術支援方案或服務。上述的範例指令碼係依「現況」提供,不附帶任何擔保。Microsoft 公司不提供任何的默示擔保,包括但不限於任何商業適售性及特定用途之適用性的默示擔保。您必須承擔此範例指令碼或文件所造成的一切風險。在任何情況下,無論是使用或無法使用此範例指令碼或文件所造成的損害 (包括但不限於營業之損失、營業之中斷、營業資訊之滅失及其他金錢損失),Microsoft 公司、作者群或此指令碼之創作、製造或散發有關之人員概不負責,即使 Microsoft 已經被告知損害發生之可能性亦同。