Layer 8Ehrlicher Tech-Support
BetriebssystemSchweregrad: Lästig

winget im SYSTEM-Konto: nicht erkannt, und das ist gewollt

winget klappt als Benutzer, scheitert als SYSTEM im Skript? MSIX-Pakete gibt es nicht für SYSTEM. Microsoft: im Systemkontext nicht unterstützt.

Aufwand:
ca. 30 Min.
Voraussetzung:
Microsoft Learn: Debugging and troubleshooting issues with WinGet, PowerShell-Modul Microsoft.WinGet.Client, Aufgabenplanung, RMM-Werkzeug oder Intune (je nachdem, wo das Skript läuft), winget --info und --logs für die Protokolle
Gilt für:
Windows 10 und Windows 11 mit App Installer / WinGet, Microsoft-Learn-Seite Debugging and troubleshooting issues with WinGet in der am 2026-10-15 abrufbaren Fassung (Seite ohne Applies-to-Zeile; Last updated 2026-07-19)

Das Symptom

Ein Admin baut ein Bereitstellungsskript: winget install für zehn Programme, ausgeführt per Aufgabenplanung als SYSTEM, über ein RMM-Werkzeug oder als Intune-Plattformskript. Interaktiv als Benutzer läuft alles, im Skript heißt es ‚winget ist nicht als Befehl erkannt’ oder der Aufruf scheitert still. Die Fehlersuche dreht sich um PATH, Neuinstallation des App Installers und Ausführungsrichtlinien, bis Stunden vergangen sind.

Die „Layer 8“-Wahrheit

Die Troubleshooting-Seite von WinGet nennt die Ursache unter der Überschrift System Context: „WinGet is delivered via the App Installer as a packaged application. MSIX (packaged) applications depend on the package being registered for the user.“ Und dann der entscheidende Satz: „As packages can be registered for any user except NT AUTHORITY\SYSTEM (aka LocalSystem, aka System), the WinGet CLI is not supported in the system context.“ Das ist keine Fehlkonfiguration, sondern eine Eigenschaft des Paketformats: Für den Benutzer SYSTEM gibt es keine Paketregistrierung, also auch kein winget.exe.

Microsoft nennt den Ausweg gleich mit: „The Microsoft.WinGet.Client PowerShell module can be used in the system context with applications that are installed machine wide.“ Skripte, die als SYSTEM laufen, nutzen also das PowerShell-Modul; die winget.exe bleibt dem Benutzerkontext vorbehalten.

Zusätzlich gilt für den Installationsbereich, und zwar auch im Benutzerkontext: „Not all installers support installing in “user” scope vs. “machine” scope consistently.“ MSIX-Pakete verhalten sich laut Seite zuverlässig, MSI-Pakete meist, EXE-Installer nicht deterministisch; und „Packages installed in user scope may still require UAC (User Account Control) authorization from an administrator.“ Der Scope-Schalter löst das SYSTEM-Problem nicht, er ist eine zweite Fehlerquelle daneben.

Wer wissen will, was winget wirklich getan hat, liest die Protokolle: „Use the command winget –info to find the directory path to your WinGet log files.“ Mit –logs oder –open-logs an einem beliebigen Befehl öffnet winget den Protokollordner danach. Im SYSTEM-Kontext findet man dort allerdings nichts, weil winget.exe dort nie gelaufen ist, und genau das ist die Diagnose.

Die Lehre ist übertragbar: Wenn ein Befehl in einem Kontext fehlt, der in einem anderen vorhanden ist, lohnt die Frage, ob er dort überhaupt existieren kann, bevor man sucht, warum er nicht gefunden wird. Bei MSIX-Paketen ist die Antwort an den Benutzer gebunden, und SYSTEM ist kein Benutzer, für den registriert wird. Das steht in einem Absatz bei Microsoft, und der Absatz ist kürzer als jede Fehlersuche.

Die echte, verifizierte Lösung

1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:

  1. 1.

    Erkennen: Läuft das Skript als SYSTEM, ist winget.exe laut Microsoft nicht unterstützt, kein PATH-Problem

    Aufgabenplanung mit SYSTEM-Konto, RMM-Agenten und Intune-Plattformskripte laufen als NT AUTHORITY\SYSTEM. Für diesen Benutzer kann kein MSIX-Paket registriert werden, und winget ist ein MSIX-Paket. Die Fehlersuche an PATH, Ausführungsrichtlinien und Neuinstallation des App Installers ist deshalb Zeitverschwendung; der Befehl fehlt dort planmäßig.

  2. 2.

    Für den SYSTEM-Kontext das PowerShell-Modul Microsoft.WinGet.Client verwenden

    Microsoft nennt das Modul als Weg für den Systemkontext mit maschinenweit installierten Anwendungen. Das Modul wird installiert und seine Befehle übernehmen die Aufgaben, die interaktiv winget.exe erledigt. Welche Befehle genau, steht in der Dokumentation des Moduls; diese Seite belegt nur, dass es der von Microsoft genannte Weg ist.

  3. 3.

    Alternativ das Skript im Benutzerkontext eines Administrators laufen lassen und den Scope bewusst setzen

    Wer bei winget.exe bleiben will, lässt das Skript als angemeldeter Administrator laufen statt als SYSTEM. Dabei den Scope bewusst wählen und einplanen, dass laut Microsoft Pakete im Benutzer-Scope trotzdem eine UAC-Bestätigung verlangen können und EXE-Installer den Scope nicht immer beachten.

  4. 4.

    Bei Fehlern die Protokolle öffnen statt zu raten

    winget --info zeigt den Pfad zu den Protokolldateien; die Option --logs an einem beliebigen Befehl öffnet den Ordner danach. Laut Seite werden Protokolle älter als sieben Tage oder über 128 MB insgesamt standardmäßig entfernt und einzelne Dateien bei 16 MB umgebrochen; wer einen alten Fehler sucht, sucht ihn rechtzeitig.

  5. 5.

    In der Bereitstellungsdoku festhalten: winget.exe = Benutzerkontext, PowerShell-Modul = Systemkontext

    Die Regel ist kurz genug für eine Zeile und erspart dem nächsten Kollegen die Stunden, die man selbst verloren hat. Dazu gehört der Hinweis, dass das kein Fehler von Windows oder winget ist, sondern eine Eigenschaft des Paketformats, die Microsoft dokumentiert.

Häufige Fragen (FAQ)

?Interaktiv läuft winget, im Skript als SYSTEM heißt es nicht erkannt. Ist der PATH kaputt?

Nein, das Paketformat ist die Ursache, und Microsoft sagt es unter der Überschrift System Context: „WinGet is delivered via the App Installer as a packaged application. MSIX (packaged) applications depend on the package being registered for the user.“ Und dann der entscheidende Satz: Pakete können für jeden Benutzer außer NT AUTHORITY SYSTEM (LocalSystem) registriert werden, deshalb gilt „the WinGet CLI is not supported in the system context“. Für SYSTEM gibt es keine Paketregistrierung, also auch kein winget.exe, egal, was im PATH steht.

?Was nehme ich dann für Bereitstellungsskripte, die als SYSTEM laufen?

Das PowerShell-Modul, das Microsoft im selben Absatz nennt: „The Microsoft.WinGet.Client PowerShell module can be used in the system context with applications that are installed machine wide.“ Skripte, die als SYSTEM laufen, nutzen also das Modul; die winget.exe bleibt dem Benutzerkontext vorbehalten. Die Einschränkung machine wide ist dabei Teil der Aussage: Es geht um Anwendungen, die maschinenweit installiert werden.

?Reicht es, --scope machine zu setzen?

Nur im Benutzerkontext, und auch dort nicht bei jedem Installer. Microsoft schreibt zum Scope: „Not all installers support installing in “user” scope vs. “machine” scope consistently.“ MSIX-Pakete verhalten sich zuverlässig, MSI meist, EXE-Installer nicht deterministisch; manche entscheiden selbst anhand der Gruppenmitgliedschaft. Und: „Packages installed in user scope may still require UAC (User Account Control) authorization from an administrator.“ Der Scope-Schalter ersetzt also nicht den Kontext, in dem winget.exe überhaupt läuft.

?Wo finde ich heraus, was winget wirklich getan hat?

In den Protokollen, und die Seite nennt den Weg: „Use the command winget --info to find the directory path to your WinGet log files.“ Der Standardpfad liegt unter dem lokalen Anwendungsdatenordner des Benutzers im Paketverzeichnis des App Installers; mit der Option --logs oder --open-logs öffnet winget den Protokollordner nach dem Befehl. Wer im SYSTEM-Kontext sucht, findet dort allerdings nichts, weil winget.exe dort nie gelaufen ist.

Belege

Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWAnfängerfehlerrunning scripts is disabled on this system

PowerShell blockiert die Ausführung von Skripten

Ein Skript startet nicht, weil die Ausführung deaktiviert sei? Das ist kein Defekt, sondern eine Schutzeinstellung — mit bewusst gewähltem Ausweg.

OSLästigThere are no more endpoints available from the endpoint mapper

WSL 2 scheitert, weil der ICS-Dienst abgeschaltet wurde

Keine neue WSL-2-Distribution, die Umstellung von WSL 1 meldet no more endpoints. Oft hat ein Tuning-Skript den Dienst SharedAccess deaktiviert.

OSLästig0xC004F074

Windows-Aktivierung: KMS-Fehler 0xC004F074

Aktivierung scheitert mit 0xC004F074 'Kein KMS konnte kontaktiert werden'? Meist ist der KMS-Host per DNS nicht erreichbar. So löst du es.