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

文書翻訳 文書翻訳
文書番号: 827227 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

この資料には、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 cl

on error resume next

const 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 0
end if

' USAGE
if 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.quit
end if

ipFile = 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.quit
end 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.quit
end if

exeWinXP = ofs.getfile(localPathToPatches + XP_Patch).name
exeW2k = ofs.getfile(localPathToPatches + W2k_Patch).name
exeW2k3 = 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.quit
end if


set osvcLocal = getobject("winmgmts:root\cimv2")

'The error-handling code is below the function that may throw one - execute it.
on error resume next

while 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... 
wend

oipFile.close()

'Clean up, remove drive mapping (check this time, because it may not have been mapped).
if ofs.folderexists("z:\") then
     onet.removenetworkdrive "z:", true
end if

wscript.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 = systemType

end function

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 827227 (最終更新日 2005-07-11) を基に作成したものです。

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

プロパティ

文書番号: 827227 - 最終更新日: 2005年8月4日 - リビジョン: 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
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com