вторник, 16 июля 2013 г.

WSUS. Принудительное обновление серверов по расписанию. (не через GPO)

задача.
защитить предприятие от косяков Microsoft. устанавливать обновления по расписанию: я для себя разработала такое :
понедельник - тестовая среда ( должны присутствовать все OC предприятия)
вторник - чай
среда - наименее значимый  виртуальный сервер (падение которого заметят все, но и восстановить можно быстро) - например прокси или один из узлов кластера.
четверг - все остальные виртуалки (кроме самого wsus)
пятница - вся физика (кроме backup)
суббота - backup
воскресенье - wsus
решение.
- в GPO  - автоматически загружать и спросить пользователяна об устаноке
далее
- 2008R2 - cmd  в планировщике
                  wuauclt.exe /updatenow                
- 2003 - скрипт vbs отсюда http://duncanbowring.wordpress.com/2013/03/22/install-and-download-your-approved-or-downloaded-wsus-updates/
тонкости:
работает "прозрачно" - не появляется надпись "идет установка обновлений" - долго ждем...
запускать из планировщика через cscript.exe  "путь\файл.vbs"
содержание :
' Automatically install approved updates from WSUS and reboot
' *** check
Set objUpdateSession = CreateObject("Microsoft.Update.Session")
Set objUpdateSearch = objUpdateSession.CreateupdateSearcher()
objUpdateSearch.ServerSelection = 0 'use system default
Set objUpdateSearchResult = objUpdateSearch.Search("IsInstalled=0 and Type='Software'")
For I = 0 To objUpdateSearchResult.Updates.Count-1
Set objUpdate = objUpdateSearchResult.Updates.Item(I)
'WScript.Echo I + 1 & "> " & objUpdate.Title
Next
If objUpdateSearchResult.Updates.Count = 0 Then WScript.Quit 'wscript.echo "no updates"
' *** download
Set objUpdatesDownload = CreateObject("Microsoft.Update.UpdateColl")
For I = 0 to objUpdateSearchResult.Updates.Count-1
Set objUpdate = objUpdateSearchResult.Updates.Item(I)
boolAddThisUpdate = false
If Not objUpdate.InstallationBehavior.CanRequestUserInput = true Then
If objUpdate.EulaAccepted = false Then
objUpdate.AcceptEula()
boolAddThisUpdate = true
Else
boolAddThisUpdate = true
end if
End If
If boolAddThisUpdate = true Then objUpdatesDownload.Add(objUpdate)
Next
If objUpdatesDownload.Count = 0 Then WScript.Quit
Set objUpdateDownloader = objUpdateSession.CreateUpdateDownloader()
objUpdateDownloader.Updates = objUpdatesDownload
objUpdateDownloader.Download()
' *** install
Set objUpdatesInstall = CreateObject("Microsoft.Update.UpdateColl")
For I = 0 To objUpdateSearchResult.Updates.Count-1
set objUpdate = objUpdateSearchResult.Updates.Item(I)
'    WScript.Echo I + 1 & "> " & objUpdate.Title
If objUpdate.IsDownloaded = true Then objUpdatesInstall.Add(objUpdate)
Next
if objUpdatesInstall.Count = 0 then wscript.quit
Set objUpdateInstaller = objUpdateSession.CreateUpdateInstaller()
objUpdateInstaller.Updates = objUpdatesInstall
Set objInstallationResult = objUpdateInstaller.Install()
' *** restart
Set objShell = CreateObject("WScript.Shell")
objShell.Run "shutdown.exe -r -t 0"

(я закомментировала последние 2 строки и перезагружаю по другому расписанию)

PS себе:  в будущем унифицировать задачу под обе операционки через PowerShell

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

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