PS Windows Update cz. 3 ServiceManager

Ostatnio prezentowałem jak pobierać i instalować aktualizacje z domyślnego źródła jakim w większości przypadków jest usługa Windows Update. Nie jest to jednak jedyne rozwiązanie, bowiem Powershell, a konkretnie obiekty tworzone na podstawie klas Microsoft.Update… umożliwiają manewrowanie pomiędzy dostępnymi źródłami aktualizacji jak i dodawanie własnych źródeł.

Zanim jednak rozpoczniemy zarządzanie swoimi źródłami aktualizacji wygenerujmy sobie listę dostępnych źródeł na danej maszynie. Do tego celu głównie będą wykorzystywane obiekty na bazie Microsoft.Update.ServiceManager.

$objServiceManager = New-Object -com "Microsoft.Update.ServiceManager"
Foreach ($objService in $objServiceManager.Services) { $objService }

Głównym elementem identyfikującym dane źródło jest ServiceID.

ServiceManager umożliwia również dodawanie źródeł, gdzie ciekawym rozwiązanie jest umożliwienie synchronizacji offline. Do tego celu jednak musimy wcześniej pobrać sobie paczkę wsusscan.cab.

Aby podłączyć usługę synchronizacji offline wystarczy skorzystać z metody AddScanPackageService.

$objService = $objServiceManager.AddScanPackageService("Offline Sync Service", "c:\wsusscan.cab")

Przejdzmy teraz do możliwości wybierania z pośród dostępnych źródeł synchronizacji. Zanim jednak zaprezentuję jak to zrobić konieczne jest zapoznanie się z parametrem wyszukiwania jakim jest ServerSelection.

typedef enum  {
  ssDefault         = 0,
  ssManagedServer   = 1,
  ssWindowsUpdate   = 2,
  ssOthers          = 3
} ServerSelection;

Domyślna wartość to 0 (ssDefault) decydująca o tym iż synchronizacja odbywa się poprzez domyślnie nałożone źródło poprzez politykę zabezpieczeń.

Drugą interesującą nas opcją jest 2 (ssWindowsUpdate) czyli odpytanie serwera Windows Update poprzezInternet.

Ostatnią ciekawą dla naszego przypadku to 2 (ssOthers) czyli ręczne wskazanie poprzez ServiceID z jakiego źródła chcemy korzystać.

Do celów dalszej prezentacji tworzymy sobie znów obiekt Sesji i Seachera

$objSession = New-Object -com "Microsoft.Update.Session"
$objSearcher = $objSession.CreateUpdateSearcher()

Na początek zmienimy z domyślnego źródła jakim u mnie jest serwer WSUS na Windows Update.

$objSearcher.ServerSelection = 2

I wysyłamy zapytanie o aktualizacje

$objResults = $objSearcher.Search("IsInstalled=0")
Foreach($objEntry in $objResults.Updates){$objEntry | Select Title,MaxDownloadSize,IsDownloaded}

Jak widzimy dostępne są pakiety językowe i sterówniki, których znów nie było dostępnych na serwerze WSUS.

Wcześniej stworzyliśmy sobie źródło synchronizacji oflline, dlatego teraz spróbujemy sobie z niego skorzystać.

Przypisujemy opcji ServerSelection wartość korzystania z „innego” źródła oraz dla parametru ServiceID przypisujemy id naszego źródła. Jak znaleźć ServiceID opisałem na samym początku.

$objSearcher.ServerSelection = 3
$objSearcher.ServiceID = "23382ef6-5a32-41c1-9730-00c17a16ffad"

Ponownie wysyłamy zapytanie do naszego źródła offline. Niestety, z racji iż jest ono offline nie posiada ono możliwości uzyskiwania informacji o onych aktualizacjach (jedyna możliwość to ręczne aktualizowanie pliku wsusscan.cab do najnowszej wersji). Opcja ta jest głównie wykorzystywana przez MSBA do skanowania czy są zainstalowane wszystkie niezbędne aktualizacje zabezpieczeń.

Dzięki mozliwosci zmiany źródeł możemy odpytywać rózne serwery aktualizacji, co czasem bardzo ułątwia pracę, gdy obecnie jakiś jest niedostępny.

Jak już wcześniej pisałem dla leniwych możliwe jest również użycie gotowych funkcji z których ja korzystam, a które zgromadziełm w module PSWindowsUpdate.

Źródła:
http://msdn.microsoft.com/en-us/library/aa387291(v=VS.85).aspx
http://code.msdn.microsoft.com/PSWindowsUpdate

Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s