Nie będę ukrywał swojego zamiłowania do PowerShella, pracuję z nim już od prawie roku. Jednak dzięki swojej rozległej budowie nadal jest mnóstwo obszarów, których jeszcze nie zgłębiłem bądź właśnie poznaję. Jednym z takich obszarów jest właśnie zarządzanie Aktualizacjami systemu Windows.
Podstawowy moduł PowerShella nie zawiera takowych funkcji, niemniej możliwość wykorzystywania swoistych interfejsów w postaci comObject (Component Object Model) umożliwia zarządzanie większością elementów zawartych w systemie Windows, m.in. usługą Windows Update.
Najbardziej przydatnymi interfejsami pod kątem zarządzania Windows Update są:
- Microsoft.Update.Session
- Microsoft.Update.UpdateColl
- Microsoft.Update.ServiceManager
- Microsoft.Update.SystemInfo
- Microsoft.Update.Installer
- Microsoft.Update.AgentInfo
Aby móc skorzystać z tych komponentów konieczne jest najpierw stworzenie obiektów na bazie odpowiednich klas do zarządzania poszczególnymi elementami usługi.
$objSession = New-Object -ComObject "Microsoft.Update.Session"
Mając stworzony obiekt obsługi sesji możemy przejrzeć jakie umożliwia on metody oraz jakie przechowuje wartości.
$objSession | Get-Member
Podstawową metodą obsługi aktualizacji jest metoda CreateUpdateSercher, która odpowiada za wyszukiwanie informacji o aktualizacjach. By z niej skorzystać konieczne jest stworzenie kolejnego obiektu do obsługi wyszukiwania.
$objSearcher = $objSession.CreateUpdateSearcher()
Obiekt ten pozwala na skorzystanie z metod przeglądania historii aktualizacji (nie wymagających łączności z serwerem Windows Update) lub przeglądania dostępnych aktualizacji w usłudze Windows Update.
Aby przeglądać historię wystarczy skorzystać z metody przeszukiwania historii aktualizacji, w której podajemy zakres początkowy i końcowy dostępnych aktualizacji.
$count = $objSearcher.GetTotalHistoryCount() $colHistory = $objSearcher.QueryHistory(0, $count)
By jednak przejrzeć aktualizacje dostępne w usłudze Windows Update, musimy wysłać zapytania wyszukiwania aktualizacji do serwera Windows Update. W zapytaniu tym konieczne jest podanie parametru wyszukiwania np. podaj wszystkie nie zainstalowane aktualizacje na danej maszynie – IsInstalled=0.
$objResults = $objSearcher.Search("IsInstalled=0")
Jako wynik zapytania dostaniemy obiekt zawierający listę dostępnych aktualizacji. By ją przejrzeć możemy wykorzystać pętlę Foreach.
Foreach($objEntry in $objResults.Updates) { $objEntry | Select Title, LastDeploymentChangeTime }
W kolejnych częściach zaprezentuję jak pobierać I instalować aktualizacje. A dla niecierpliwych odsyłam do modułu, którego używam u siebie PSWindowsUpdate.
Źródła:
http://msdn.microsoft.com/en-us/library/aa387291(v=VS.85).aspx
http://code.msdn.microsoft.com/PSWindowsUpdate
Bardzo fajny artykuł. Kod i wytłumaczenie opisane prosto, ale profesjonalnie. Brakuje mi tylko modułu PSWindowsUpdate, o którym wspominasz na końcu. Czy możesz go umieścić lub wysłac na mejla ?
Pozdrawiam
hermitagup
Moduł jest rozwijany w ramach projektu dostępnego na Technet Script Center:
https://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc