Windows Updates installieren/automatisieren

Dieser Eintrag ist länger geworden als ich dachte. Zunächst wollte ich nur grob beschreiben wie man Windows Updates unter Windows 2008 und 2008 R2 installiert (funktioniert auch bei 2016, ist aber umständlicher als nötig). Jedoch führte eins zum anderen… naja und letztendlich habe ich das komplette Automatisierungs-Skript drin gehabt. Aber fangen wir mal von vorne an:

Um Windows Updates zu installieren kann folgendes Skript genutzt werden. Als Parameter übergibt man wohin die Logfiles geschrieben werden sollen.

Es ist zu beachten, dass man bis Server 2008 R2 Updates nicht per Remote-Call auf entfernten Systemen installiert werden können. Das geht erst ab Server 2012. Wer also auf einem Server 2008 oder 2008 R2 Updates remote installieren möchte, muss einen Trick anwenden:

  • Das Skripte auf dem Zielsystem verfügbar machen
  • Auf dem Zielsystem einen neuen Task erstellen
  • Den Task triggern

Das Tool um einen neuen Task (auch auf remote Maschinen) zu erstellen ist in Windows integriert und heißt “schtasks.exe”. Hier müssen einige Parameter übergeben werden:

So, langsam wird es interessant. Wenn wir also schon geskriptete Remote-Tasks erstellen und dadurch Updates installieren, sollten wir vielleicht auch schauen, dass das Skript Install-WindowsUpdates immer aktuell ist. Hierfür können wir wie folgt vorgehen:

  • Text des Skripts als Variable speichern
  • Definieren wo es auf dem Zielsystem hingelegt werden soll
  • Durch einen Invoke-Command rüber pipen, damit wir nicht über CIFS o.ä. gehen müssen, sondern alles innerhalb unserer Remote PowerShell läuft.

Zum Schluss kann man sich dann noch beliebig austoben… was ich auch getan habe. Es folgt das fertige Skript, welches bei euch garantiert noch Anpassungen braucht. Es beinhaltet u.a. folgende Parameter:

  • Computernamen, Username, Passwort
  • Ziel-Pfad für das Installations-Skript
  • Telefon- und SMS-Nummer
  • Pfad zu 3rd-Party Tool welches anrufen und SMS schicken kann

Zudem beachtet es u.a. folgende Themen:

  • Max. Reboot-Cycles die durchlaufen werden dürfen
  • Max. Zeit die das Installieren dauern darf
  • Was passiert wenn der PC/Server beim Reboot hängen bleibt
  • Alarmierung per 3rd Party Tool

Es setzt zudem voraus, dass pskill.exe von Systeninternals PSTools im Pfad “C:\Tools\PSTools\pskill.exe” parat liegt (Pfad kann angepasst werden). Das Skript selbst ist sauber kommentiert, sodass ihr euch zurecht finden solltet 🙂 Viel Spaß!

In meinem Fall wird dieses Skript selbst nur von einem anderen Skript aufgerufen. Dieses erstellt wiederum vorher einen Snapshot sofern es sich um eine VM handelt, liest die Login-Daten, etc. aus der CMDB aus, bietet eine kleine GUI in welcher man die Zielsysteme auswählen sowie sein Kürzel sowie die Telefonnummern hinterlegen kann, etc.

Da dies jedoch eine zu spezifische Anwendung ist, habe ich mich entschlossen sie nicht zu posten.