суббота, 18 мая 2013 г.

Скрипт для поиска по номеру KB и извлечения обновлений с сервера WSUS

Данный скрипт, написанный на Visual Basic Script, позволяет извлекать необходимые номера KB из контента WSUS-сервера. Запускать его следует только на самом сервере WSUS. Для работы понадобятся привилегии локального администратора и администратора сервиса WSUS.
Текст скрипта приведен ниже:


'Export KB Files from WSUS
dim obj, obj_from, obj_to, oExec, WshShell, oFSO, objTextFile, obj_srv, obj_db
title = "Export KB Files from WSUS"

Set WshShell = CreateObject("WScript.Shell")
Set obj = CreateObject("Shell.Application")
Set oFSO = CreateObject("Scripting.FileSystemObject")

obj_from = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\ContentDir")
obj_from = obj_from&"\WsusContent"

obj_srv = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\SqlServerName")

obj_db = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\SqlDatabaseName")

set obj_to = obj.browseforfolder(0,"Укажите путь к папке, в которую будут помещены "&Chr(13)&"извлекаемые обновления.",&H0001,&H0000)
if obj_to is Nothing then
wscript.quit(1)
end if
path_to = obj_to.self.path

request = "osql -o export.lst -h-1 -w 300 -E -d "
request=request&obj_db
request=request&" -S "
request=request&obj_srv
request=request&" /Q "&Chr(34)&"select FileDigest,FileName from tbFile where"

KB = InputBox("Введите номер нужного обновления, например KBxxxxxx",title) 
if KB = "" then
wscript.quit(1)
else
request=request&" FileName like '%%"&KB&"%%'"
end if

request=request&"and (FileName like '%%ENU%%' or FileName like '%%RUS%%') and FileName like '%%.exe%%' and FileName not like '%%express%%' and FileName not like '%%IE%%' order by Modified"&Chr(34)

If oFSO.FileExists(".\export.lst") Then
oFSO.DeleteFile(".\export.lst")
end if

Set oExec = WshShell.Exec(request)

Do While oExec.Status = 0
WScript.Sleep 100
Loop

IF oExec.ExitCode = 1 then 
MsgBox "Не удалось подключиться серверу WSUS..:("
oFSO.DeleteFile(".\export.lst")
wscript.quit(1)
end if

set objTextFile = oFSO.OpenTextFile(".\export.lst",1)

Do Until objTextFile.AtEndofStream
strNextLine=objTextFile.ReadLine
strNextLine=trim(strNextLine)

IF InStr (strNextLine,".exe") then
 newArray=Split(strNextLine)
 WSUSFile   = right(newArray(0),40)&".exe"
 WSUSFolder = right(newArray(0),2)
 If oFSO.FileExists(obj_from&"\"&WSUSFolder&"\"&WSUSFile) Then
 oFSO.CopyFile obj_from&"\"&WSUSFolder&"\"&WSUSFile, path_to&"\"&newArray(1)
 end if  
end if

Loop
objTextFile.Close
oFSO.DeleteFile(".\export.lst")
MsgBox "Операция выполнена успешно! :)"

Set obj = Nothing
Set obj_from = Nothing
Set obj_to = Nothing
Set oExec = Nothing
Set WshShell = Nothing
Set oFSO  = Nothing
Set objTextFile = Nothing


Поместите скрипт в текстовый файл с расширением ".vbs". После запуска понадобится указать путь для извлекаемых обновлений и номер KB, который нам нужен. Скрипт произведет поиск по базе WSUS-сервера и скопирует необходимые файлы из папок контента.

Комментариев нет:

Отправить комментарий