Windows (Server) Updates zeitgesteuert durchführen mit PSWindowsUpdate

Updates unter Windows und Windows Server lassen sich normalerweise nur manuell starten. Nach den Updates kann maximal eine Neustart-Zeit festgelegt werden. Mit einem zusätzlichen Powershell-Modul kann das allerdings auch die Windows Aufgabenplanung übernehmen.

Hierzu muss Powershell (mit Administrator-Rechten) gestartet werden. Powershell muss in der Version 5 oder höhrer vorhanden sein (kann mit $PSVersionTable getestet werden). Nun gibt man folgenden Befehl ein, um PSWindowsUpdate zu installieren:

Install-Module -Name PSWindowsUpdate -Force

Um alle Befehle von PSWindowsUpdate anzeigen zu lassen, gibt man diesen Befehl ein:

Get-Command -Module PSWindowsUpdate



Um verfügbare Updates anzeigen zu lassen:

Get-WindowsUpdate -MicrosoftUpdate -Verbose


Updates installieren und automatisch neustarten:

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot


Mit diesen Befehlen kann man nun ein Powershell-Skript erstellen und mit der Windows Aufgabenplanung zeitgesteuert ausführen. Öffnet einen Text-Editor, kopiert folgendes rein und speichert es als .ps1-Datei ab (z.B. windowsupdate.ps1):


Install-Module PSWindowsUpdate -Force

#installiert die neueste Version.

 

Get-WindowsUpdate -MicrosoftUpdate -Verbose

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot

#installiert die Updates und startet neu.


Nun startet ihr die Aufgabenplanung und erstellt eine neue Aufgabe:


Gebt dem Kind einen Namen und wählt "Unabhängig von der Benutzeranmeldung ausführen" sowie "Mit höchsten Privilegien ausführen" aus. Ebenfalls sollte der Administrator als ausführender Benutzer ausgewählt werden:



Als Trigger stellt ihr eine gewünschte Zeit ein:


Bei den Aktionen müsst ihr für "Programm starten" den Pfad zu Pwoershell angeben (nachfolgend der Standard-Pfad):

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Bei den Argumenten kommt "-command "Pfad zur ps1.Datei" rein, z.B.:

-command "c:\windowsupdate.ps1"



Unter älteren Windows-Versionen (z.B. Windows Server 2016) kann das Modul nicht direkt installiert werden, weil die vorhandene Powershell-Version nicht über TLS 1.2 agiert. Hier kann man für die aktuelle Powershell-Sitzung TLS 1.2 aktivieren:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Vorher und hinterher kann auch geprüft werden, welche Protokolle aktiviert sind:

[Net.ServicePointManager]::SecurityProtocol

Was man feststellt: der Befehl aktiviert zwar TLS 1.2, deaktiviert aber die anderen Protokolle. Da die Aktivierung aber nur für die aktuelle Powershell-Sitzung gilt, sind nach einem Powershell-Neustart wieder die vorherigen Protokolle aktiv.
Der Befehl kann also in einer älteren Windows-Server-Umgebung das Skript ergänzen.

Fertig!

Kommentare