Confessions of a Dangerous Mind

Brain.FlushBuffer()
posts - 176, comments - 234, trackbacks - 93

Utilizzare C# per automatizzare la ricerca e l'installazione degli updates da WSUS

Una delle cose più interessanti dell'infrastruttura WSUS (Windows Server Update Services) e WUA (Windows Update Agent), è data dalla possibilità di automatizzare molte attività dell'update agent per ricercare, scaricare ed installare gli update automatici pubblicati in un server WSUS. Ovviamente il client deve essere configurato correttamente e puntare ad un server WSUS anch'esso adeguatamente configurato e nel quale siano stati pubblicati degli "updates".

L'impiego di C# (o VB.net) per automatizzare la procedura, avviene previa creazione dell'assembly di interop con la libreria WUApiLib. Dopo averla referenziata nel nostro progetto avremo a disposizione il Namespace WUApiLib, che contiene molti oggetti utili al nostro scopo:

  • UpdateSession: rappresenta una sessione di update. Deve sempre essere creato e da esso vengono generati gli altri oggetti.
  • UpdateSearcher: oggetto per effettuare ricerche di updates sul server WSUS
  • UpdateDownloader: oggetto utilizzato per scaricare gli updates. Lo scaricamento degli updates avviene tramite il servizio BITS (Background Intelligent Transfer Service). L'impiego di questo servizio ci permette di limitare la banda consumata dallo scaricamento, riprendere gli scaricamenti interrotti e molto altro.
  • UpdateInstaller: oggetto per avviare l'installazione degli updates. Nella maggior parte dei casi questi updates sono di tipo "silent", ovvero non richiedono intervento dell'utente

La creazione di una sessione e la ricerca potrebbero avvenire così:

   1: private UpdateSession _session;
   2: _session = new UpdateSession();
   3: UpdateSearcher _updateSearcher = (UpdateSearcher)_session.CreateUpdateSearcher();
   4: ISearchResult _searchResult = _updateSearcher.Search("IsAssigned=1 and IsHidden=0 and IsInstalled=0 and Type='Software'");

Dopodichè, se si trovano degli update si può scandire la collection ottenuta in questo modo:

   1: foreach (IUpdate _update in _searchResult.Updates)
   2: {
   3:     Console.WriteLine(string.format("{0} - {1}",_update.Title,_update.Description);
   4: }

Infine, selezionati gli updates da scaricare, si può avviare lo scaricamento mediante l'oggetto UpdateDownloader:

   1: UpdateDownloader _downloader = _session.CreateUpdateDownloader();
   2: _downloader.Updates.Add(_update);
   3: IDownloadResult _downloadResult = _downloader.Download();
   4:  
   5: UpdateInstaller _installer = (UpdateInstaller)_session.CreateUpdateInstaller();
   6:  
   7: if (_update.IsDownloaded)
   8:     _installer.Install(_update);
Si può vedere come tutto dipenda dall'oggetto session. Ovviamente ognuno degli oggetti introdotti è ricchissimo di proprietà e di metodi, per cui la cosa migliore è quella di approfondirne lo studio. Un buon punto di partenza è: http://msdn2.microsoft.com/en-us/library/aa387102(VS.85).aspx. Buon update!

Print | posted on martedì 29 aprile 2008 15:37 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET