Visual Basic スクリプトを使用してリモート ホスト コンピュータにセキュリティ更新プログラム 824146 (MS03-039) または 823980 (MS03-026) をインストールする方法

Windows XP のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Windows XP のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

Windows Server 2003 のサポートは 2015 年 7 月 14 日で終了しています

Windows Server 2003 のサポートは 2015 年 7 月 14 日で終了しています。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響します。 この変更の意味および保護された状態を維持する方法について説明します。

概要
この資料には、Patchinstall.vbs という名前の Microsoft Visual Basic Scripting Edition スクリプトのサンプルが含まれています。このスクリプトは、Windows Management Instrumentation (WMI) スクリプトを使用して、Microsoft Windows NT、Windows 2000、または Windows Server 2003 のドメイン環境で、セキュリティ更新プログラム 824146 (MS03-039) または 823980 (MS03-026) がインストールされていないリモート ホスト コンピュータに更新プログラムをインストールする、ネットワーク管理者のためのサンプルです。Patchinstall.vbs は、IP アドレスの一覧を含むファイル (Ipfile.txt) を入力として、リモート ホスト コンピュータ上の既知の場所 (C:\Patchinst.exe) にあるセキュリティ更新プログラム 824146 (MS03-039) または 823980 (MS03-026) をインストールします。セキュリティ更新プログラム 824146 (MS03-039) の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
824146 [MS03-039] RPCSS サービスのバッファ オーバーランにより、攻撃者によって悪質なプログラムが実行される
セキュリティ更新プログラム 823980 の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
823980 [MS03-026] RPC インターフェイスのバッファ オーバーランによりコードが実行される
ネットワークをスキャンしてこのセキュリティ更新プログラムがインストールされていないコンピュータを検出するための、ネットワーク管理者用のツールの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
827363 KB 824146 スキャナを使用して、セキュリティ更新プログラム 823980 (MS03-026) および 824146 (MS03-039) がインストールされていないホスト コンピュータを特定する方法

注意事項

  • セキュリティ更新プログラム 824146 または 823980 を正常にインストールするには、対象のリモート コンピュータの管理者のアクセス許可が必要です。
  • 対象のコンピュータが Microsoft Windows XP ベースの場合、Patchinstall.vbs スクリプトを実行するには、対象のコンピュータが Windows NT ドメイン、Windows 2000 ドメイン、または Windows Server 2003 ドメインに参加している必要があります。
  • Patchinstall.vbs スクリプトでは、Windows Management Instrumentation (WMI) を使用します。WMI は DCOM (Distributed Component Object Model) に依存します。このため、マイクロソフト セキュリティ情報 MS03-039 または MS03-026 に記載されている脆弱性を回避するために DCOM が無効になっているコンピュータには更新プログラムがインストールされません。
  • Patchinstall.vbs スクリプトを実行するコンピュータのローカル フォルダにセキュリティ更新プログラム パッケージ 824146 または 823980 の 3 つのファイル (3 つのバージョンのそれぞれに対応するファイル) を用意する必要があります。また、これらの更新プログラム パッケージのファイル名を Patch_XP.exe (Windows XP 用パッケージ)、Patch_W2K.exe (Windows 2000 用パッケージ)、Patch_W2K3.exe (Windows Server 2003 用パッケージ) に変更する必要があります。
  • Patchinstall.vbs スクリプトに変更を加えて、他の更新プログラムをインストールすることもできます。
詳細
Patchinstall.vbs スクリプトで実行される処理は、以下のとおりです。
  • セキュリティ更新プログラム 824146 または 823980 のインストール先リモート ホスト コンピュータの IP アドレスの一覧を読み込みます。この一覧の取得元のファイルは、IP アドレスが 1 行に 1 つずつ記載された ASCII テキスト ファイル (Ipfile.txt) です。たとえば、KB824146 Scanning Tool で出力される 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 アドレスを処理します。
重要 : このサンプル スクリプトを使用する場合、ユーザーのネットワーク環境に合うように修正を加え、実際の運用環境で使用する前にテスト環境でスクリプトのテストを行うことをお勧めします。

Patchinstall.vbs スクリプトを使用するには、Patchinstall.vbs という名前を付けたテキスト ファイルに下記のスクリプトを貼り付けます。その後、次のコマンド ラインを使用して Patchinstall.vbs スクリプトを実行します。
cscript patchinstall.vbs Ipfile.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 Support 担当者は、特定のプロシージャの機能についての問い合わせにはお答えできますが、ユーザー固有の目的に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。
' 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
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 827227 (最終更新日 2005-07-11) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
プロパティ

文書番号:827227 - 最終更新日: 08/04/2005 08:05:52 - リビジョン: 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, Microsoft Windows 2000 Server

  • kbinfo KB827227
フィードバック