Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 5
  • 795

Komputer zdalny, na którym mają być zainstalowane aktualizacje, ma system nie starszy niż Windows Server 2008 lub Windows Vista. Polecenie wydajemy z komputera z systemem Windows 7 lub nowszym. Wszystkie komputery należą do tej samej domeny. Interesuje mnie sposób, który wykorzystuje wbudowane elementy systemu, nie wymagający instalowania modułów napisanych przez użytkowników.

Pawel_U
  • Zapytał
  • @ Pawel_U | 15.04.2014
    • 2
    • 1
    • 6

Odpowiedzi (2)

  • 9
Dominik_Węglarz
  • Odpowiedział
  • @ Dominik_Węglarz | 15.04.2014
    • laureat
    • 20
    • 10
    • 88
Komentarze
Te rozwiązania już poznałem. Interesuje mnie sposób, który wykorzystuje wbudowane elementy systemu, a nie wymagający instalowania modułów napisanych przez użytkowników.
Skomentował : @ Pawel_U ,15.04.2014
  • 2
  • 1
  • 6
  • 12

Ponieważ PowerShell nie posiada wbudowanego modułu realizującego wymienione w pytaniu zadania, nie można wskazać jednego polecenia i pozostaje napisanie własnego skryptu.

Aby rozwiązać problem we własnym skrypcie, należy użyć API Windows Update do pobrania i aktualizacji oraz jednej z technik dostępu zdalnego (remotingu) do uruchomienia skryptu na wielu stacjach.
Pobranie i zainstalowanie aktualizacji to z punktu widzenia API następujące kroki:

1. Utworzenie sesji WU
2. Wyszukanie aktualizacji  (Search)
3. Pobranie aktualizacji (Download)
4. Instalacja aktualizacji (Install)


Pierwsze dwa kroki w dużym uproszczeniu mogą wyglądać następująco:

$objSession = New-Object -ComObject "Microsoft.Update.Session"
$objSearcher = $objSession.CreateUpdateSearcher()
$search = "IsInstalled=0 and Type='Software' and IsHidden=0"
$objResults = $objSearcher.Search($search)


Wynik działania metody Search na obiekcie $objSearcher powinien zawierać odnalezione aktualizacje, które w następnym etapie pobieramy i instalujemy:

$Updates = $objResults.updates
$UpdateCollection = New-Object -ComObject Microsoft.Update.UpdateColl
$UpdateCollection.Add($Updates.Item(0)) | out-null

$Downloader = $objSession.CreateUpdateDownloader()
$Downloader.Updates = $UpdateCollection
$Downloader.Download()

$Installer = New-Object -ComObject Microsoft.Update.Installer
$Installer.Updates = $UpdateCollection
$Installer.Install()


Należy pamiętać, że powyższe kroki to tylko uproszczona wersja, która wymaga dostosowania do realnych warunków.

 

  • Odpowiedział
  • @ | 15.04.2014
  • TRENER ALTKOM AKADEMII