Windows Software mit einem Klick updaten – PowerShell-Skript

Blaues Beitragsbild mit Windows-Symbol, Update-Icon und Text "Update Windows & Software with one button click"

Regelmäßige Updates sind entscheidend für Sicherheit, Performance und Stabilität unter Windows. Doch die Aktualisierung verschiedener Komponenten – Windows Update, Microsoft Store Apps und winget-Pakete – erfordert normalerweise mehrere Schritte an unterschiedlichen Stellen im System.

In diesem Artikel zeige ich dir ein PowerShell-Skript, mit dem du alle wichtigen Updates mit einem einzigen Klick ausführen kannst. Ideal für Administratoren, Power-User oder die automatisierte Wartung von Windows-Systemen.

Wir kombinieren dabei drei Update-Quellen:

  • Windows / Microsoft Updates (Betriebssystem & Treiber)
  • Microsoft Store Apps
  • Winget-Pakete (Programme wie Zoom, VLC, Discord, Chrome, VS Code etc.)

Warum ein Skript statt manueller Updates?

Manuelle Updates sind fehleranfällig und kosten Zeit:

Update-Typ Normaler Weg Problem
Windows Update Einstellungen-App → Update & Sicherheit Viele Klicks, langsame UI
Microsoft Store Store öffnen, „Downloads & Updates“ Prüfung nicht wirklich automatisierbar
Software (z. B. Chrome) Updates je Programm einzeln Kein zentraler Überblick

Mit PowerShell sparst du:

  • Zeit durch Batch-Installation
  • Aufwand bei vielen Geräten
  • Sicherheitsrisiken durch regelmäßige Automatisierung

Das Skript kann problemlos auch in geplante Tasks oder RMM-Tools integriert werden.

Voraussetzungen

Komponente Zweck
PowerShell (Admin-Rechte) Vollzugriff auf Update-APIs
PSWindowsUpdate-Modul Automatisierung von Windows Update
winget installiert Paketmanager für Programme & Store-Apps

Das Skript installiert fehlende Komponenten automatisch, soweit möglich.

Hinweis zur Ausführung von PowerShell-Skripten

Falls das Skript bei dir nicht ausgeführt werden kann und eine Fehlermeldung zur Ausführungsrichtlinie erscheint, muss eventuell vorher die PowerShell Execution Policy angepasst werden.

Führe dazu in einer PowerShell mit Administratorrechten folgenden Befehl aus:


Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

Damit erlaubst du lokal signierte Skripte und selbst erstellte Skripte, ohne die Sicherheit vollständig aufzuheben. Anschließend kannst du das Update-Skript wie beschrieben starten.

Das PowerShell-Skript

Dieses Skript kannst du direkt in der PowerShell ISE speichern und mit F5 ausführen:

  • Empfohlener Dateiname: Update-Alles.ps1
  • Wichtig: PowerShell ISE als Administrator starten!

<#
.SYNOPSIS
   Führt mit einem Durchlauf alle wichtigen Updates aus:
   - Windows / Microsoft Updates
   - Microsoft Store Apps
   - winget-Pakete

.HINWEIS
   Am besten PowerShell ISE als Administrator starten und dann dieses Skript mit F5 ausführen.
#>

#region Hilfsfunktionen

function Test-IsAdmin {
    $currentIdentity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal       = New-Object Security.Principal.WindowsPrincipal($currentIdentity)
    return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}

function Write-Section {
    param(
        [Parameter(Mandatory = $true)]
        [string]$Text
    )

    Write-Host ""
    Write-Host "===== $Text =====" -ForegroundColor Cyan
}

#endregion Hilfsfunktionen

#region Vorbedingungen prüfen

if (-not (Test-IsAdmin)) {
    Write-Warning "Dieses Skript sollte als *Administrator* ausgeführt werden."
    Write-Warning "Bitte starte die PowerShell ISE mit Rechtsklick -> 'Als Administrator ausführen'."
    return
}

#endregion Vorbedingungen prüfen

#region Windows / Microsoft Updates (PSWindowsUpdate)

function Invoke-WindowsUpdateAll {
    Write-Section "Windows / Microsoft Updates"

    $moduleName = "PSWindowsUpdate"

    # Prüfen, ob Modul verfügbar ist
    if (-not (Get-Module -ListAvailable -Name $moduleName)) {
        Write-Host "PSWindowsUpdate-Modul nicht gefunden. Installation wird versucht..." 

        try {
            # NuGet Provider sicherstellen
            $nuget = Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue
            if (-not $nuget) {
                Write-Host "Installiere NuGet Package Provider..."
                Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -ErrorAction Stop
            }

            Write-Host "Installiere PSWindowsUpdate-Modul aus der PowerShell Gallery..."
            Install-Module -Name $moduleName -Force -Confirm:$false -ErrorAction Stop

            Write-Host "PSWindowsUpdate erfolgreich installiert."
        }
        catch {
            Write-Warning "Fehler bei Installation von PSWindowsUpdate: $($_.Exception.Message)"
            Write-Warning "Windows Updates werden in diesem Durchgang übersprungen."
            return
        }
    }

    # Modul importieren
    try {
        Import-Module PSWindowsUpdate -ErrorAction Stop
    }
    catch {
        Write-Warning "PSWindowsUpdate konnte nicht geladen werden: $($_.Exception.Message)"
        return
    }

    try {
        Write-Host "Suche nach verfügbaren Windows / Microsoft Updates..."
        # Nur anzeigen, was gefunden wird
        $updates = Get-WindowsUpdate -AcceptAll -IgnoreReboot

        if (-not $updates) {
            Write-Host "Es sind aktuell keine Windows / Microsoft Updates verfügbar."
            return
        }

        Write-Host "Es wurden $($updates.Count) Update(s) gefunden. Installation startet..."

        # Updates installieren (ohne Auto-Reboot)
        Get-WindowsUpdate -AcceptAll -Install -IgnoreReboot

        # Prüfen, ob ein Neustart erforderlich ist
        if (Get-Command Get-WURebootStatus -ErrorAction SilentlyContinue) {
            $rebootStatus = Get-WURebootStatus
            if ($rebootStatus -and $rebootStatus.RebootRequired) {
                Write-Warning "Ein Neustart ist erforderlich, um die Windows Updates vollständig abzuschließen."
            }
        }
        else {
            Write-Host "Hinweis: Neustart könnte erforderlich sein. Bitte ggf. manuell neu starten."
        }
    }
    catch {
        Write-Warning "Fehler bei Windows Update: $($_.Exception.Message)"
    }
}

#endregion Windows Update

#region Microsoft Store Updates & winget Updates

function Invoke-WingetUpdates {
    Write-Section "winget Updates (inkl. MS Store, falls konfiguriert)"

    $wingetCmd = Get-Command winget -ErrorAction SilentlyContinue
    if (-not $wingetCmd) {
        Write-Warning "winget ist nicht installiert oder nicht im Pfad. winget-Updates werden übersprungen."
        return
    }

    # 1) Allgemeine winget-Upgrades (alle Quellen)
    try {
        Write-Host "Aktualisiere alle winget-Pakete (alle Quellen)..."
        winget upgrade --all --accept-package-agreements --accept-source-agreements
    }
    catch {
        Write-Warning "Fehler beim allgemeinen winget-Upgrade: $($_.Exception.Message)"
    }

    # 2) Spezifisch Microsoft Store Apps über Quelle 'msstore' (falls vorhanden)
    try {
        Write-Host ""
        Write-Host "Prüfe, ob winget-Quelle 'msstore' vorhanden ist..."
        $msStoreSource = winget source list | Select-String -Pattern "msstore"

        if ($msStoreSource) {
            Write-Host "Quelle 'msstore' gefunden. Aktualisiere Microsoft Store Apps über winget..."
            winget upgrade --source msstore --all --accept-package-agreements --accept-source-agreements
        }
        else {
            Write-Warning "winget-Quelle 'msstore' ist nicht konfiguriert."
            Write-Host "Öffne die Microsoft Store Seite 'Downloads und Updates'..."
            Start-Process "ms-windows-store://downloadsandupdates"
            Write-Host "Bitte im Store-Fenster auf 'Aktualisieren' klicken, um App-Updates anzustoßen."
        }
    }
    catch {
        Write-Warning "Fehler bei Microsoft Store / msstore Updates: $($_.Exception.Message)"
    }
}

#endregion winget / Store

#region Hauptfunktion: Alles auf einmal

function Invoke-AlleUpdates {
    Write-Section "Starte vollständigen Update-Lauf"

    Invoke-WindowsUpdateAll
    Invoke-WingetUpdates

    Write-Section "Update-Lauf abgeschlossen"
    Write-Host "Falls ein Neustart erforderlich ist, bitte das System neu starten."
}

#endregion Hauptfunktion

# --- Automatisch ausführen, wenn das Skript gestartet wird ---
Invoke-AlleUpdates
 

So führst du das Skript aus

  1. PowerShell ISE als Administrator öffnen
    Rechtsklick auf die PowerShell ISE → „Als Administrator ausführen“.
  2. Skript in ein neues Fenster einfügen und speichern.
  3. Mit F5 starten – das Skript führt dann alle Updates automatisch aus.

Optional kannst du das Skript zusätzlich:

  • als Desktop-Verknüpfung hinterlegen,
  • über Geplante Tasks automatisch ausführen lassen,
  • in Intune / RMM / Deployment-Pipelines integrieren.

Vorteile gegenüber GUI-Updates

Vorteil Beschreibung
Automatisierbar Ideal für IT-Wartung und mehrere Geräte
Vollständiger Updatet Betriebssystem, Store & Apps zentral
Kein Nutzer-Input --accept-*-Parameter vermeiden Rückfragen
Schneller Kein Klicken durch verschiedene Menüs

Besonders IT-Admins profitieren von der Kombination aus Windows Update + Software Update + Store Update in einem einzigen Skript.

Alle Angaben ohne Gewähr!

1 Comment

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert