Jak nainstalovat 824146 (MS03-039) nebo opravy zabezpečení 823980 (MS03-026) do vzdálených hostitelských počítačů pomocí skriptu jazyka visual basic

Souhrn

Tento článek obsahuje ukázkový skript Microsoft Visual Basic Scripting Edition nazvaný Patchinstall.vbs. Tento skript je příkladem použití WMI Windows Management Instrumentation () nainstalovat 824146 (MS03-039) nebo opravy zabezpečení 823980 (MS03-026) do vzdálených hostitelských počítačů, ve kterých není nainstalována v prostředí domény Microsoft Windows NT, Windows 2000 nebo Windows Server 2003 oprava skriptů správce sítě. Skript Patchinstall.vbs provede soubor (Ipfile.txt) obsahující adresy IP jako vstup a nainstaluje 824146 (MS03-039) nebo opravy zabezpečení 823980 (MS03-026) ze známého umístění vzdáleného hostitelského počítače (C:\Patchinst.exe). Další informace o opravě zabezpečení 824146 (MS03-039) získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

824146 MS03-039: přetečení vyrovnávací paměti ve službě RPCSS může způsobit spuštění kódu

Další informace o opravě zabezpečení 823980 získáte klepnutím na následující číslo článku databáze Microsoft Knowledge Base:

823980 MS03-026: vyrovnávací paměť přetečení v rozhraní protokolu RPC umožňuje spuštění kódu

Další informace o nástroj, který mohou správci sítě rozpoznat v síti počítače, které nejsou nainstalovány tyto opravy zabezpečení získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

Jak 827363 Použití skenovacího nástroje KB 824146 k určení hostitelských počítačů, které nemají 823980 (MS03-026) a 824146 (MS03-039) opravy zabezpečení

Poznámky

  • Musíte mít oprávnění správce vzdálených cílových počítačů k úspěšné instalaci opravy zabezpečení 823980 nebo 824146.
  • Microsoft Windows XP na cílové počítače musí být připojen k doméně systému Windows NT, Windows 2000 nebo Windows Server 2003, aby úspěšně použít skript Patchinstall.vbs.
  • Skript Patchinstall.vbs používá službu Windows Management Instrumentation (WMI). Služba WMI závisí na objektů modelu DCOM (Distributed Component). Proto Patchinstall.vbs nefunguje v cílových počítačích, kde byl model DCOM zakázán obejít chybu popsanou v bulletinech o zabezpečení MS03-039 a MS03-026.
  • Balíčky opravy zabezpečení 823980 nebo 824146 musí být umístěn v místní složce v počítači, spusťte skript Patchinstall.vbs, kde balíčky musí být přejmenována na Patch_XP.exe (v systému Windows XP), Patch_W2K.exe (v systému Windows 2000) nebo Patch_W2K3.exe (v systému Windows Server 2003).
  • Můžete upravit skript Patchinstall.vbs nainstalovat další opravy.

Další informace

Skript Patchinstall.vbs provede následující úkoly:
  • Skript přečte seznam adres IP vzdálených hostitelských počítačů, ve kterých chcete instalovat opravu zabezpečení 823980 nebo 824146. Skript tento seznam získá z textového souboru ASCII (Ipfile.txt), který obsahuje seznam adres IP (jedna adresa IP na každém řádku). Můžete soubor protokolu Vulnerable.txt KB824146 skenovací nástroj pro soubor Ipfile.txt .
  • Skript získá první adresu IP ze seznamu.
  • Skript určí verzi systému Windows v cílovém počítači.
  • Skript provede mapování jednotky Z: v počítači C $ v cílovém počítači.
  • Skript zkopíruje správnou verzi opravy (pro systém Windows XP, Windows 2000 nebo Windows Server 2003) do C:\Patchinst.exe v cílovém počítači (pomocí mapování jednotky Z:).
  • Skript spustí instalaci opravy a potom automaticky restartuje cílový počítač bez jakéhokoli uživatelského vstupu nebo zobrazení přepne dialogových oken pomocí -q-f (bezobslužný režim instalace).
  • Skript se čeká na dokončení instalace.
  • Skript se pokusí odstranit soubor C:\Patchinst.exe v cílovém počítači.
  • Skript odstraní mapování jednotky Z:.
  • Skript zpracovává další adresu IP v seznamu.
Důležité: Společnost Microsoft doporučuje upravit tento ukázkový skript pro prostředí vaší sítě a potom jej před použitím ve výrobním prostředí otestovat v testovacím prostředí.

Chcete-li skript Patchinstall.vbs použít, vložte následující skript do textového souboru nazvaného Patchinstall.vbs. Potom spusťte skript Patchinstall.vbs pomocí následujícího příkazového řádku:
cscript patchinstall.vbs Ipfile.txt Místní_cesta_k_opravám
V tomto příkazu představuje parametr Ipfile.txt je textový soubor, který obsahuje seznam adres IP vzdálených hostitelských počítačů, ve které chcete instalovat opravu zabezpečení 823980 nebo 824146. Místní_cesta_k_opravám je úplná cesta ke složce obsahující (přejmenována na Patch_XP.exe pro systém Windows XP, Windows 2000 pro Patch_W2k.exe a Patch_W2k3.exe systému Windows Server 2003) balíčky opravy zabezpečení 823980 nebo 824146.

Skript Patchinstall.vbs

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo odvozené. To zahrnuje, ale není omezen pouze na předpokládané záruky obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste obeznámeni s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou pomoci vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo vytvářet postupy podle vašich konkrétních požadavků.
' 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


Vlastnosti

ID článku: 827227 - Poslední kontrola: 16. 1. 2017 - Revize: 3

Váš názor