Visual basic 스크립트를 사용 하 여 원격 호스트 컴퓨터에 824146 (MS03-039) 또는 823980 (MS03-026) 보안 패치를 설치 하는 방법

요약

이 여기서로 라는 샘플 Microsoft Visual Basic Scripting Edition 스크립트를 포함 합니다. 이 스크립트는 네트워크 관리자가 Windows 관리 계측 (WMI) 스크립트 패치는 Microsoft Windows NT, Windows 2000 또는 Windows Server 2003 도메인 환경에 설치 하지 않은 원격 호스트 컴퓨터에 824146 (MS03-039) 또는 823980 (MS03-026) 보안 패치를 설치를 사용 하 여 방법의 예입니다. 로에서 알려진된 위치 (C:\Patchinst.exe) 원격 호스트 컴퓨터에 824146 (MS03-039) 또는 823980 (MS03-026) 보안 패치를 설치 하 고 IP 주소를 입력으로 포함 하는 파일 (Ipfile.txt)를 사용 합니다. 824146 (MS03-039) 보안 패치에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.:

824146 MS03-039: RPCSS에 버퍼 오버런이 코드 실행을 허용할 수 있습니다

823980 보안 패치에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.

823980 MS03-026: RPC에서 버퍼 오버런이 코드 실행을 허용할 수 있습니다

네트워크 관리자가 이러한 보안 패치가 설치 되지 않은 컴퓨터에 대 한 네트워크를 검색 하는 데 사용할 수 있는 도구에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.

827363 KB 824146 검색 도구를 사용 하 여 823980 (MS03-026) 또는 824146 (MS03-039) 보안 패치가 설치 되지 않은 호스트 컴퓨터를 식별 하는 방법

참고

  • 824146 또는 823980 보안 패치를 설치할 원격 대상 컴퓨터에 관리 권한이 있어야 합니다.
  • 대상 Windows XP 기반 컴퓨터에 Windows NT, Windows 2000 또는 Windows Server 2003 도메인에 성공적으로 가입 되어 있어야 Microsoft로 사용 합니다.
  • 로 (WMI)를 사용합니다. WMI에는 구성 요소 개체 모델 DCOM (분산)에 따라 다릅니다. 따라서 고로 Microsoft 보안 공지 MS03-039 또는 m s 03-026에서 해결 된 보안 문제를 해결 하려면 DCOM 사용할 수 있는 대상 컴퓨터에 작동 하지 않습니다.
  • 824146 또는 823980 보안 패치 패키지로 스크립트를 실행 하 고 Patch_XP.exe (Windows XP) 용, (Windows 2000)에 대 한 Patch_W2K.exe 및 Patch_W2K3.exe (Windows Server 2003)에 대 한 패키지 이름을 바꿀 수 있는 컴퓨터의 로컬 폴더에 있어야 합니다.
  • 로 다른 패치를 설치 하도록이 스크립트를 수정할 수 있습니다.

자세한 내용

로 이러한 작업을 수행합니다.
  • 824146 또는 823980 보안 패치를 설치할 원격 호스트 컴퓨터에 대 한 IP 주소 목록을 읽습니다. (줄 당 하나의 IP 주소) IP 주소 목록을 포함 하는 ASCII 텍스트 파일 (Ipfile.txt)에서이 목록을 얻습니다. 예를 들어,의 경우 Vulnerable.txt 로그 파일은 KB824146에서 검색 Ipfile.txt 파일에 대 한 도구를 사용할 수 있습니다.
  • 목록에서 첫 번째 IP 주소를 얻습니다.
  • 스크립트는 대상 컴퓨터에서 Windows 버전을 결정합니다.
  • 스크립트는 스크립트 컴퓨터의 드라이브를 Z를 대상 컴퓨터의 C $로 매핑합니다.
  • 스크립트 복사 패치의 올바른 버전 (Windows XP, Windows 2000 또는 Windows Server 2003) 용 C:\Patchinst.exe 대상 컴퓨터 (드라이브 Z 매핑을 통해) 합니다.
  • 스크립트 패치를 설치 하면 다음 자동으로 다시 시작 하지 않고도 대상 컴퓨터 입력 하거나 대화 상자 -q-f 를 사용 하 여 스위치 (자동된 설치 모드).
  • 설치가 완료 되기를 기다립니다.
  • 스크립트를 대상 컴퓨터에서 C:\Patchinst.exe 파일을 삭제 하려고 합니다.
  • 드라이브 Z 매핑을 제거 합니다.
  • 목록에서 다음 IP 주소를 처리합니다.
중요: 사용자 네트워크 환경에 대 한 예제 스크립트를 수정 하 고 프로덕션 환경에서 사용 하기 전에 테스트 환경에서 스크립트를 다음 테스트 하는 것이 좋습니다.

로 데로 라는 텍스트 파일에 다음 스크립트를 붙여 넣습니다. 그런 다음 다음 명령줄을 사용 하 여로 실행 합니다.
cscript로 Ipfile.txt LocalPathToPatches
이 명령에서 Ipfile.txt 는 824146 또는 823980 보안 패치를 설치 하려면 원격 호스트 컴퓨터에 대 한 IP 주소 목록이 포함 된 텍스트 파일입니다. LocalPathToPatches 는 824146 또는 823980 보안 패치 패키지 (Windows XP 용 Patch_XP.exe, Patch_W2k.exe에 대 한 Windows 2000 및 Windows Server 2003 Patch_W2k3.exe로 변경)을 포함 하는 폴더의 전체 경로입니다.

Microsoft는 모든 보증, 그림에 대 한 묵시적인 보증. 이 포함 되지만 상품성 또는 특정 목적에의 적합성의 묵시적된 보증에 국한 되지는 않습니다. 이 문서는 작성 하 고 프로시저를 디버깅할 데 사용 되는 도구 및 여기서 설명 하는 프로그래밍 언어에 익숙한 가정 합니다. Microsoft 지원 엔지니어는 특정 프로시저의 기능을 설명할 수 있지만 추가 기능을 제공 하거나 특정 요구 사항에 맞도록 프로시저를 구성 하는 이러한 예제를 수정 하지 않습니다.
' 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


속성

문서 ID: 827227 - 마지막 검토: 2017. 2. 7. - 수정: 2

피드백