WSUS, Windows Update y Server Core
Hola
Pablo, uno de nuestros participantes en el IT Momentum que está muy animado probando Windows Server 2008, me pregunta acerca del compartamiento de una instalación Server Core con respecto a las actualizaciones automáticas.
La respuesta corta es que Server Core mantiene intacto el Agente de Windows Update. Por tanto, correctamente configurado, puede descargar e instalar actualizaciones tanto de Microsoft Update como de un servidor WSUS.
Con respecto a cómo configurarlo, pues igual que siempre. O bien por políticas de grupo, o a mano. Para una configuración rápida del agente, hay un comando rápido:
c:\windows\system32> cscript scregedit.wsf /AU 4
NOTA: Aqui podríamos poner 1, 2, 3 o 5. En Server Core no podemos recibir notificaciones, por lo que no tienen demasiado sentido, asi es que cuidado con los las GPOs que afecten a los Server Cores de la red. El valor 0 deshabilita la descarga e instalación automática de las actualizaciones, pero aun asi se pueden hacer a mano (ver más abajo)
Ahora bien. ¿Como sabemos si esto esta funcionando?. ¿Como fuerzo el chequeo contra Microsoft Update o contra el servidor WSUS en su caso?. ¿Como forzar la instalación de una actualización en particular?
Aqui os dejo algunos scripts que he fusilado de aquí y de allá. Hay que ejecutarlos mediante cscript.
ListInstalledUpdates.vbs
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
intHistoryCount = objSearcher.GetTotalHistoryCountSet colHistory = objSearcher.QueryHistory(1, intHistoryCount)
For Each objEntry in colHistory
Wscript.Echo "Title: " & objEntry.Title
Wscript.Echo "Date: " & objEntry.Date
Wscript.Echo "Service ID: " & objEntry.ServiceID
Wscript.Echo "Support URL: " & objEntry.SupportURL
Wscript.Echo
Next
CheckUpdates.vbs
Set objSearcher = CreateObject("Microsoft.Update.Searcher")
Set objResults = objSearcher.Search("Type='Software'")
Set colUpdates = objResults.UpdatesFor i = 0 to colUpdates.Count - 1
Wscript.Echo "Title: " & colUpdates.Item(i).Title
Set objIdentity = colUpdates.Item(i).Identity
Wscript.Echo "Revision number: " & objIdentity.RevisionNumber
Wscript.Echo "Update ID: " & objIdentity.UpdateIDSet objInstallationBehavior = colUpdates.Item(i).InstallationBehavior
Wscript.Echo "Can request user input: " & _
objInstallationBehavior.CanRequestUserInput
Wscript.Echo "Support URL: " & colUpdates.Item(i).SupportURL
Wscript.Echo "Type: " & colUpdates.Item(i).Type
For Each strArticle in colUpdates.Item(i).KBArticleIDs
Wscript.Echo "KB article: " & strArticle
Next
Wscript.Echo
Next
InstallUpdate.vbs (necesita como parámetro el UpdateID que suelta CheckUpdates.vbs)
Set objArgs = WScript.Arguments
Update = objArgs(0)Set objCollection = CreateObject("Microsoft.Update.UpdateColl")
Set objSearcher = CreateObject("Microsoft.Update.Searcher")
Set objResults = objSearcher.Search _
("UpdateID='" & Update & "'")
Set colUpdates = objResults.Updates
objCollection.Add(colUpdates.Item(0))Set objInstaller = CreateObject("Microsoft.Update.Installer")
objInstaller.Updates = objCollection
Set objInstallResults = objInstaller.Install
Wscript.Echo objInstallResults.RebootRequired
Wscript.Echo objInstallResults.ResultCode
SCWindowsUpdate.vbs (todo lo anterior junto)
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()WScript.Echo "Searching for updates..." & vbCRLF
Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type='Software'")WScript.Echo "List of applicable items on the machine:"
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & update.Title
NextIf searchResult.Updates.Count = 0 Then
WScript.Echo "There are no applicable updates."
WScript.Quit
End IfWScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)"
strInput = WScript.StdIn.Readline
WScript.EchoIf (strInput = "N" or strInput = "n") Then
WScript.Quit
ElseIf (strInput = "Y" or strInput = "y") ThenWScript.Echo vbCRLF & "Creating collection of updates to download:"
Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
For I = 0 to searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToDownload.Add(update)
NextWScript.Echo vbCRLF & "Downloading updates..."
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()WScript.Echo vbCRLF & "List of downloaded updates:"
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
If update.IsDownloaded Then
WScript.Echo I + 1 & "> " & update.Title
End If
NextSet updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")
WScript.Echo vbCRLF & _
"Creating collection of downloaded updates to install:"For I = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(I)
If update.IsDownloaded = true Then
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToInstall.Add(update)
End If
NextEnd If
WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)"
strInput = WScript.StdIn.Readline
WScript.EchoIf (strInput = "N" or strInput = "n") Then
WScript.Quit
ElseIf (strInput = "Y" or strInput = "y") Then
WScript.Echo "Installing updates..."
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Set installationResult = installer.Install()
'Output results of install
WScript.Echo "Installation Result: " & _
installationResult.ResultCode
WScript.Echo "Reboot Required: " & _
installationResult.RebootRequired & vbCRLF
WScript.Echo "Listing of updates installed " & _
"and individual installation results:"
For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
updatesToInstall.Item(i).Title & _
": " & installationResult.GetUpdateResult(i).ResultCode
Next
End If
Saludos
Comments
- Anonymous
March 10, 2011
Buenas noches. Tengo una pregunta con respecto a los servidores WSUS. como sabemos de vez en cuando hay que depurar la base de datos y hay que hacerlo manualmente. hay alguna manera de crear una tarea agendada para que realice la limpieza, e incluso, una vez que lo haga, te pueda avisar por correo para estar al tanto y optimizar la administracion? reaq252@hotmail.com