您目前已離線,請等候您的網際網路重新連線

如何在遠端主機電腦上,使用 Visual Basic 指令碼安裝 824146 (MS03-039) 或 823980 (MS03-026) 安全性補充程式

Windows XP 支援已結束

Microsoft 於 2014 年 4 月 8 日結束對 Windows XP 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

Windows Server 2003 的支援已於 2015 年 7 月 14 日結束

Microsoft 已於 2015 年 7 月 14 日結束對 Windows Server 2003 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

結論
本文包含名為 Patchinstall.vbs 的範例 Microsoft Visual Basic Scripting Edition 指令碼。此指令碼是一個範例,會顯示網路系統管理員如何在 Microsoft Windows NT、Windows 2000 或 Windows Server 2003 網域環境中未安裝補充程式的遠端主機電腦上,使用 Windows Management Instrumentation (WMI) 指令碼以安裝 824146 (MS03-039) 或 823980 (MS03-026) 安全性補充程式。Patchinstall.vbs 指令碼會將包含 IP 位址的檔案 (Ipfile.txt) 視為輸入,並從遠端主機電腦 (C:\Patchinst.exe) 上的已知位置安裝 824146 (MS03-039) 或 823980 (MS03-026) 安全性補充程式。 如需有關 824146 (MS03-039) 安全性補充程式的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
824146MS03-039:RPCSS 緩衝區滿溢可能會使攻擊者執行惡意的程式
如需有關 823980 安全性補充程式的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
823980MS03-026:RPC 介面中的緩衝區滿溢可能會允許程式碼執行
如需網路系統管理員用來掃描網路以找出哪些電腦未安裝這些安全性補充程式的工具的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
827363如何使用 KB 824146 掃描工具,找出沒有安裝 823980 (MS03-026) 和 824146 (MS03-039) 安全性補充程式的主機電腦

注意

  • 您必須具備遠端目的電腦上的系統管理權限,才能順利安裝 824146 或 823980 安全性補充程式。
  • 必須將 Microsoft Windows XP 目的電腦加入 Windows NT、Windows 2000 或 Windows Server 2003 網域,才能順利使用 Patchinstall.vbs 指令碼。
  • Patchinstall.vbs 指令碼會使用 Windows Management Instrumentation (WMI)。WMI 必須依賴「分散式元件物件模型」(DCOM) 執行。因此,Patchinstall.vbs 無法在已停用 DCOM 的目的電腦上,暫時解決在 Microsoft 安全性公告 MS03-039 或 MS03-026 中所處理的弱點。
  • 824146 或 823980 安全性補充程式套件的所在位置必須是執行 Patchinstall.vbs 指令碼之電腦上的本機資料夾,且必須將套件重新命名為 Patch_XP.exe (適用於 Windows XP)、Patch_W2K.exe (適用於 Windows 2000) 及 Patch_W2K3.exe (適用於 Windows Server 2003)。
  • 您可以修改 Patchinstall.vbs 指令碼以安裝其他補充程式。
其他相關資訊
Patchinstall.vbs 指令碼會執行這些工作:
  • 指令碼會讀取您要安裝 824146 或 823980 安全性補充程式之遠端主機電腦的 IP 位址清單。指令碼會從包含 IP 位址清單 (每行一個 IP 位址) 的 ASCII 文字檔 (Ipfile.txt) 取得這份清單。例如,您可以使用 KB824146 掃描工具的 Vulnerable.txt 記錄檔,以取得 Ipfile.txt 檔案。
  • 指令碼會取得該清單的第一個 IP 位址。
  • 指令碼會判斷目的電腦上的 Windows 版本。
  • 指令碼會將指令碼電腦上的 Z 磁碟機對應到目的電腦上的 C$。
  • 指令碼會將補充程式 (適用於 Windows XP、Windows 2000 或 Windows Server 2003) 的正確版本,複製到目的電腦的 C:\Patchinst.exe (藉由使用 Z 磁碟機對應)。
  • 指令碼會安裝該補充程式,然後藉由使用 -q -f 參數 (自動安裝模式) 自動重新啟動目的電腦,而無需任何使用者輸入或對話方塊。
  • 指令碼會等候安裝完成。
  • 指令碼會嘗試刪除目的電腦上的 C:\Patchinst.exe 檔案。
  • 指令碼會移除 Z 磁碟機對應。
  • 指令碼會處理清單中的下一個 IP 位址。
重要 Microsoft 建議您針對自己的網路環境修改這個範例指令碼,並建議您先在測試環境中進行測試之後,才在生產環境中使用。

如果要使用 Patchinstall.vbs 指令碼,請在名為 Patchinstall.vbs 的文字檔中貼上下列指令碼。然後,使用下列命令列執行 Patchinstall.vbs 指令碼:
cscript patchinstall.vbsIpfile.txt LocalPathToPatches
在這個命令中,Ipfile.txt 是一份文字檔,其中包含您要安裝 824146 或 823980 安全性補充程式之遠端主機電腦的 IP 位址清單。LocalPathToPatches 是資料夾的完整路徑,該資料夾包含 824146 或 823980 安全性補充程式套件 (如果是 Windows XP,便重新命名為 Patch_XP.exe;如果是 Windows 2000,便重新命名為 Patch_W2k.exe、如果是 Windows Server 2003,便重新命名為 Patch_W2k3.exe)。

Patchinstall.vbs 指令碼

Microsoft 僅提供示範性的程式設計範例,不做任何明示或默示的保證。其中包括 (但不限) 其適售性與適合某特定用途之默示擔保。本文假設您對於示範所用的程式設計語言,以及用來建立和偵錯程序的工具相當熟悉。Microsoft 技術支援工程師可以協助說明特定程序的功能,但無法修改這些範例以提供附加功能或建構程序來滿足您的特定需求。
' 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
內容

文章識別碼:827227 - 最後檢閱時間:08/08/2005 11:04:01 - 修訂: 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
意見反應