Windows Updates per Powershell Script

Liebe IT-Enthusiasten, heute tauchen wir in die Tiefen des Update-Managements ein. Insbesondere konzentrieren wir uns auf Windows Server und wie Ihr mit PowerShell-Scripting Eure Systemwartung automatisieren könnt. Automatisierte Updates sind nicht nur eine Zeitersparnis, sie sind auch ein entscheidender Schritt in Richtung einer effizienten IT-Infrastruktur.

Warum Automatisierung mit PowerShell?

Automatisierung in der IT ist wie das Salz in der Suppe – unverzichtbar. PowerShell Scripting bietet eine flexible und mächtige Lösung, um wiederkehrende Aufgaben wie Windows Updates zu automatisieren. Es erhöht nicht nur die Effizienz, sondern reduziert auch menschliche Fehler, die in manuellen Prozessen auftreten können. In diesem Abschnitt erfahren Ihr, warum PowerShell die ideale Wahl für IT-Administration und Systemwartung ist.

Das Herzstück: Windows-Updater-Powershell-Script

    # Script Name:  windows-updater.ps1
    # Beschreibung: Lädt Module offline in Powershell, installiert Windows Updates und startet den Rechner ggf. neu
    #               Lauffähig unter Windows Server 2016, 2019 und 2022
    # Aufruf:       -
    # Autor:        Patrick Asmus
    # Web:          https://www.media-techport.de
    # Git-Reposit.: https://git.media-techport.de/scriptos/windows-updater.git
    # Version:      1.1
    # Datum:        30.11.2023
    # Modifikation: log-dir wird erstellt wenn nicht vorhanden
    #####################################################
    
    # Variablen
    $LogPfad = "C:\logs\windows-updater.log"
    $ModulVerzeichnis = Join-Path -Path $PSScriptRoot -ChildPath "Modules"
    $env:PSModulePath += ";$ModulVerzeichnis"
    
    # Funktion zur Formatierung des Datums im deutschen Stil
    function Format-DeutschesDatum ([datetime] $date) {
        return $date.ToString("dd.MM.yyyy HH:mm:ss")
    }
    
    # Überprüfe, ob der Log-Ordner existiert, andernfalls erstelle ihn
    if (-not (Test-Path -Path $LogPfad)) {
        New-Item -ItemType Directory -Path (Split-Path $LogPfad) -Force
    }
    
    # Zeitstempel für das Logfile
    $LogZeitstempel = Format-DeutschesDatum (Get-Date)
    $LogEintrag = "Windows Updates gestartet am: $LogZeitstempel"
    Write-Host $LogEintrag
    $LogEintrag | Out-File -Append -FilePath $LogPfad
    
    # Importiere das PSWindowsUpdate-Modul
    Import-Module -Name "PSWindowsUpdate" -Verbose
    
    # Überprüfe, ob das Modul erfolgreich geladen wurde
    if (Get-Module -Name PSWindowsUpdate -ListAvailable) {
        Write-Host "PSWindowsUpdate-Modul erfolgreich geladen."
    
        # Installiere Windows-Updates und speichere die Ausgabe
        $Ausgabe = Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot
    
        # Überprüfe, ob ein Neustart erforderlich ist
        if ($Ausgabe.RestartRequired) {
            Write-Host "Ein Neustart ist erforderlich."
        } else {
            Write-Host "Kein Neustart erforderlich."
        }
    
        # Gib die Ausgabe der Windows-Update-Installation in der Kommandozeile aus und schreibe sie ins Logfile
        $Ausgabe | ForEach-Object {
            $LogMeldung = "ComputerName: $($_.ComputerName) Result: $($_.Result) KB: $($_.KB) Size: $($_.Size) Title: $($_.Title)"
            Write-Host $LogMeldung
            $LogMeldung | Out-File -Append -FilePath $LogPfad
        }
    } else {
        Write-Host "Fehler beim Laden des PSWindowsUpdate-Moduls."
    }
    
    # Zeitstempel für das Logfile nach Abschluss des Skripts
    $LogZeitstempel = Format-DeutschesDatum (Get-Date)
    $LogEintrag = "Windows Updates beendet am: $LogZeitstempel"
    Write-Host $LogEintrag
    $LogEintrag | Out-File -Append -FilePath $LogPfad
    "----------------------------" | Out-File -Append -FilePath $LogPfad

    Übersicht über das Script

    Das Script ist ein Musterbeispiel für effizientes Update-Management. Dieses PowerShell-Script lädt notwendige Module, installiert Windows Updates und startet, falls nötig, nach dem Update Eure Server neu. Es ist kompatibel mit Windows Server 2016, 2019 und 2022. Lasst uns einen genaueren Blick auf seine Funktionsweise werfen.

    Wie das Script funktioniert

    Der erste Teil des Scripts kümmert sich um das Logging. Hier wird ein Log-Verzeichnis, falls noch nicht vorhanden, erstellt und ein Zeitstempel für den Start des Update-Prozesses gesetzt. Anschließend wird das PSWindowsUpdate-Modul importiert. Dieses Modul ist der Schlüssel für das Installieren der Windows Updates. Nach der Installation der Updates überprüft das Script, ob ein Neustart des Servers erforderlich ist, loggt alle wichtigen Informationen und startet den Server anschließend neu.

    PowerShell Script Module und lokale Installation

    Bedeutung von PowerShell Modulen

    PowerShell-Module sind Sammlungen von Befehlen, die spezifische Funktionen ausführen. In unserem Fall verwendet das “Windows-Updater-Powershell” Script das PSWindowsUpdate-Modul, um mit Microsoft Windows Update-Servern zu interagieren. Aber warum sollten wir manchmal diese Module lokal installieren?

    Vorteile lokaler Modulinstallation

    Die lokale Installation von Modulen bietet mehrere Vorteile. Erstens ermöglicht sie die Nutzung des Scripts in Umgebungen ohne direkten Internetzugang. Zweitens gewährleistet sie, dass die benötigten Versionen der Module immer verfügbar sind, unabhängig von externen Faktoren. Dies ist besonders wichtig für die Stabilität und Zuverlässigkeit in produktiven IT-Umgebungen.

    Integration in Eure IT-Struktur

    Die Integration des “Windows-Updater-Powershell” Scripts in Eure bestehende IT-Struktur ist ein bedeutender Schritt zur Verbesserung Eurer Systemwartung. Es vereinfacht das Update-Management und sorgt für eine konsistente Ausführung von Windows Updates über alle Server hinweg, weil wir hier zum Beispiel die Updates in der Aufgabenverwaltung geplant starten lassen können.

    Best Practices für die Anwendung

    Bevor Ihr das Script in Eurem Produktionsumfeld einsetzt, testet es gründlich in einer Testumgebung. Achtet darauf, alle relevanten Parameter und Pfade korrekt anzupassen. Es ist auch ratsam, regelmäßige Überprüfungen der Log-Dateien durchzuführen, um sicherzustellen, dass das Script wie erwartet funktioniert.

    Download

    Das Script habe ich in meinem Git-Repository abgelegt, damit ich es euch zum Download zu Verfügung stellen kann.
    Es gibt sicher noch einige bessere Scripte, aber ich denke, dass dieses Script zumindest grundlegend schon einmal ne gute Sache ist.
    Das Script gibt es hier zum Download.

    Danke fürs Teilen!