Einleitung
In den bisherigen Teilen unserer Winget-Serie haben wir die Grundlagen, Installation, Architektur und wichtigsten Befehle des Windows Package Managers kennengelernt. Jetzt beschäftigen wir uns ausführlich mit seiner wahrscheinlich wichtigsten Aufgabe: Software finden und installieren.
Die einfachste Variante ist schnell erklärt:
winget search firefox
und anschließend:
winget install Mozilla.Firefox
Für gelegentliche Installationen kann das bereits ausreichen. Wer Winget jedoch administrativ, automatisiert oder in Skripten einsetzen möchte, sollte genauer verstehen, wie Pakete identifiziert und Installer ausgewählt werden.
Denn ein Befehl wie
winget install firefox
ist zwar bequem, aber nicht unbedingt die beste Wahl für ein automatisiertes Deployment.
Besser ist beispielsweise:
winget install --id Mozilla.Firefox --exact
Warum das so ist, sehen wir uns Schritt für Schritt an.
Software mit Winget suchen
Der Ausgangspunkt einer Installation ist häufig winget search.
Die allgemeine Syntax lautet:
winget search <Suchbegriff>
Beispielsweise:
winget search firefox
Winget durchsucht dabei die konfigurierten Paketquellen und liefert passende Ergebnisse zurück.
Die Suche arbeitet standardmäßig nicht nur mit vollständigen Programmnamen. Eine normale Suchanfrage kann Teilübereinstimmungen liefern. Außerdem lässt sich die Suche gezielt auf Felder wie Name, ID, Moniker, Tag oder einen bereitgestellten Befehl beschränken.
Beispielsweise:
winget search --name Firefox
oder:
winget search --id Mozilla.Firefox
Auch eine Suche nach Tags ist möglich:
winget search --tag browser
Das macht search zu einem leistungsfähigen Werkzeug, wenn die genaue Paketbezeichnung noch nicht bekannt ist.
Warum der Programmname allein nicht immer genügt
Nehmen wir an, wir suchen nach:
winget search vscode
Je nach verfügbaren Quellen können mehrere Ergebnisse erscheinen.
Das ist grundsätzlich sinnvoll. Schließlich könnten mehrere Pakete einen ähnlichen Namen, einen passenden Moniker oder entsprechende Tags besitzen.
Für einen Menschen ist meistens schnell erkennbar, welches Paket gemeint ist.
Für ein Skript ist das problematischer.
Ein automatisiertes Deployment sollte niemals darauf angewiesen sein, dass Winget aus mehreren ähnlichen Treffern zufällig den richtigen auswählt.
Deshalb kommen die Paket-IDs ins Spiel.
Winget-IDs verstehen
Jedes Winget-Paket besitzt einen eindeutigen Bezeichner.
Beispiele sind:
Mozilla.Firefox Git.Git Microsoft.VisualStudioCode Microsoft.PowerShell
Die Paket-ID besteht häufig aus dem Hersteller beziehungsweise Publisher und dem Produktnamen.
Eine Suche zeigt typischerweise mindestens:
Name ID Version Quelle
Für automatisierte Installationen ist die ID wesentlich zuverlässiger als der sichtbare Produktname.
Statt:
winget install firefox
sollten Sie daher bevorzugt verwenden:
winget install --id Mozilla.Firefox
Microsoft empfiehlt zur eindeutigen Auswahl die Kombination aus Paket-ID und exakter Suche.
Exakte Suche mit --exact
Noch eindeutiger wird der Aufruf mit:
--exact
Die Kurzform lautet:
-e
Beispiel:
winget install --id Mozilla.Firefox --exact
oder:
winget install --id Mozilla.Firefox -e
Damit wird nicht mehr mit der normalen Teilzeichenfolgensuche gearbeitet, sondern eine exakte Übereinstimmung verlangt. Die exakte Suche berücksichtigt dabei auch Groß- und Kleinschreibung.
Für administrative Skripte ist daher folgendes Schema empfehlenswert:
winget install --id <Paket-ID> --exact
Beispielsweise:
winget install --id Git.Git --exact
Vor der Installation Paketinformationen anzeigen
Gerade bei unbekannten Anwendungen sollte nicht unmittelbar installiert werden.
Mit show lassen sich zunächst die Paketinformationen anzeigen:
winget show --id Mozilla.Firefox --exact
Abhängig vom Manifest erhalten Sie Informationen beispielsweise über:
- Paketname
- Paket-ID
- Version
- Herausgeber
- Beschreibung
- Homepage
- Lizenz
- Installer
- Architektur
Mit show können außerdem gezielt Version, Quelle, Architektur und weitere Eigenschaften ausgewählt beziehungsweise untersucht werden.
Für Administratoren ergibt sich damit ein sinnvoller Ablauf:
search ↓ ID ermitteln ↓ show ↓ Paket kontrollieren ↓ install
Ein Programm installieren
Die Standardinstallation erfolgt mit:
winget install --id Mozilla.Firefox --exact
Winget übernimmt anschließend die notwendigen Schritte.
Vereinfacht dargestellt:
Paket identifizieren
↓
Manifest ermitteln
↓
passenden Installer auswählen
↓
Installer herunterladen
↓
Hash überprüfen
↓
Installer starten
↓
Installation durchführen
Der Anwender muss die Webseite des Herstellers nicht mehr manuell besuchen und den passenden Download selbst auswählen.
Mehrere Programme installieren
Aktuelle Winget-Versionen können mehrere Pakete mit einem einzigen install-Aufruf verarbeiten.
Beispielsweise:
winget install Microsoft.VisualStudioCode Microsoft.PowerShell Git.Git
Winget installiert die angegebenen Pakete nacheinander. Microsoft empfiehlt für größere Paketsammlungen alternativ winget export und winget import oder winget configure.
Damit lässt sich beispielsweise ein Entwickler-PC sehr schnell vorbereiten.
Eine typische Grundausstattung könnte aus folgenden Anwendungen bestehen:
Git PowerShell Visual Studio Code PowerToys
Bei umfangreicheren Standardinstallationen sind allerdings Konfigurationsdateien oder Importlisten übersichtlicher als sehr lange Kommandozeilen.
Silent Installation
Besonders für Administratoren ist die unbeaufsichtigte Installation interessant.
Hierfür steht --silent beziehungsweise -h zur Verfügung:
winget install --id Mozilla.Firefox --exact --silent
Der eigentliche Installer wird damit im Silent-Modus ausgeführt und seine Benutzeroberfläche unterdrückt.
Das eignet sich beispielsweise für:
- automatisierte Deployments
- neue Arbeitsplatzrechner
- virtuelle Maschinen
- Schulungs-PCs
- Testsysteme
- administrative Skripte
Allerdings hängt die konkrete Installation weiterhin vom jeweiligen Installer ab. Winget verwendet die im Manifest hinterlegten Informationen, um den Installer entsprechend aufzurufen.
Silent und Interactive
Das Gegenstück zu --silent ist:
--interactive
beziehungsweise:
-i
Beispiel:
winget install --id Mozilla.Firefox --exact --interactive
Damit wird der Installer im interaktiven Modus ausgeführt.
Das kann sinnvoll sein, wenn während der Installation individuelle Einstellungen vorgenommen werden sollen.
Lizenzbedingungen automatisch akzeptieren
Bei automatisierten Installationen können Rückfragen zu Paket- oder Quellenvereinbarungen störend sein.
Winget besitzt deshalb unter anderem:
--accept-package-agreements
und:
--accept-source-agreements
Ein automatisierter Aufruf könnte beispielsweise so aussehen:
winget install --id Mozilla.Firefox --exact --silent --accept-package-agreements --accept-source-agreements
Dabei ist die Unterscheidung wichtig: --accept-package-agreements akzeptiert Vereinbarungen des Pakets, während --accept-source-agreements die Vereinbarungen der verwendeten Winget-Quelle betrifft.
Gerade in Unternehmen sollte man diese Parameter nicht gedankenlos einsetzen. Durch ihre Verwendung werden Vereinbarungen automatisiert akzeptiert. Lizenzbedingungen sollten daher organisatorisch und gegebenenfalls rechtlich geprüft sein.
Interaktivität vollständig deaktivieren
Winget besitzt zusätzlich:
--disable-interactivity
Damit werden interaktive Eingabeaufforderungen des Winget-Clients deaktiviert.
Für automatisierte Prozesse kann beispielsweise folgende Kombination interessant sein:
winget install --id Git.Git --exact --silent --accept-package-agreements --accept-source-agreements --disable-interactivity
Vor einem produktiven Rollout sollte ein solcher Befehl jedoch mit dem jeweiligen Paket getestet werden.
Bestimmte Version installieren
Standardmäßig installiert Winget die höchste beziehungsweise aktuelle verfügbare Paketversion.
Manchmal wird jedoch bewusst eine bestimmte Version benötigt.
Dafür steht --version beziehungsweise -v zur Verfügung.
Zunächst können die verfügbaren Versionen gesucht werden:
winget search --id Git.Git --exact --versions
Anschließend kann eine konkrete Version angegeben werden:
winget install --id <Paket-ID> --exact --version <Version>
Beispielsweise schematisch:
winget install --id Git.Git --exact --version 2.x.x
Die gewünschte Versionsnummer muss natürlich tatsächlich in der verwendeten Paketquelle vorhanden sein.
Diese Möglichkeit ist besonders wichtig für:
- Kompatibilitätstests
- Entwicklungsumgebungen
- ältere Fachverfahren
- reproduzierbare Testsysteme
- Softwarefreigaben in Unternehmen
Warum Versionskontrolle wichtig sein kann
Die neueste Version ist nicht automatisch in jeder Umgebung die richtige Version.
Ein Unternehmen könnte beispielsweise festgelegt haben:
Anwendung: Beispielsoftware Freigegebene Version: 5.4 Neu verfügbar: 6.0
Eine automatische Installation der neuesten Version könnte dann gegen die interne Softwarefreigabe verstoßen.
Mit Winget lässt sich dagegen gezielt eine freigegebene Version anfordern – vorausgesetzt, diese Version ist noch in der verwendeten Quelle verfügbar.
Installer auswählen
Ein Paket kann mehrere Installer anbieten.
Mögliche Varianten sind beispielsweise:
- EXE
- MSI
- MSIX
- APPX
- portable Pakete
- unterschiedliche Architekturen
- unterschiedliche Sprachen
Winget versucht automatisch, den für das System passenden Installer auszuwählen.
Diese Auswahl kann jedoch beeinflusst werden.
Mit
--installer-type
kann ein bestimmter Installer-Typ angefordert werden. Die aktuelle Winget-Konfiguration unterstützt unter anderem Typen wie exe, msi, msix, portable, zip, inno, nullsoft und wix.
Beispiel:
winget install --id <Paket-ID> --exact --installer-type msi
Natürlich funktioniert dies nur, wenn für das betreffende Paket tatsächlich ein entsprechender Installer vorhanden ist.
Architektur auswählen
Auch die Prozessorarchitektur kann angegeben werden:
--architecture
Beispielsweise:
winget install --id <Paket-ID> --exact --architecture x64
Je nach Paket und Plattform kommen unter anderem x86, x64, arm oder arm64 infrage.
Auf einem modernen klassischen Windows-PC dürfte häufig x64 relevant sein, während ARM-basierte Windows-Geräte zunehmend arm64 verwenden.
Winget kann allerdings nur eine mit dem System kompatible Architektur auswählen.
Installation für Benutzer oder Computer
Mit --scope kann – sofern das jeweilige Paket dies unterstützt – der Installationsbereich beeinflusst werden.
Beispielsweise:
winget install --id <Paket-ID> --exact --scope user
oder:
winget install --id <Paket-ID> --exact --scope machine
Damit lässt sich unterscheiden, ob eine Anwendung bevorzugt für den aktuellen Benutzer oder den gesamten Computer installiert werden soll. Die tatsächliche Unterstützung hängt vom Paket und Installer ab.
Bestimmte Paketquelle auswählen
Sind mehrere Sources eingerichtet, kann dasselbe oder ein ähnliches Paket in verschiedenen Quellen auftauchen.
Mit:
--source
beziehungsweise:
-s
kann eine Quelle explizit ausgewählt werden.
Beispiel:
winget install --id Git.Git --exact --source winget
Microsoft nennt die explizite Source-Auswahl auch als Möglichkeit, mehrdeutige Ergebnisse bei mehreren Quellen aufzulösen.
Das wird besonders interessant, sobald Unternehmen eigene Paketquellen einsetzen.
Microsoft Store als Quelle
Winget kann außerdem Anwendungen aus der Microsoft-Store-Quelle verwalten.
Die Store-Quelle wird mit:
msstore
angesprochen.
Eine Suche kann beispielsweise auf diese Quelle beschränkt werden:
winget search "Windows Terminal" --source msstore
Bei Microsoft-Store-Paketen werden eindeutige Store-IDs verwendet. Microsoft weist darauf hin, dass für diese IDs --exact nicht erforderlich ist.
Benutzerdefinierte Installer-Parameter
Für besondere Fälle können zusätzliche Parameter an einen Installer übergeben werden.
Dafür existieren unter anderem:
--custom
und:
--override
--custom ergänzt die standardmäßig verwendeten Installer-Argumente, während --override die Argumente ersetzt, die direkt an den Installer weitergegeben werden.
Diese Optionen sind leistungsfähig, sollten aber nur verwendet werden, wenn die Parameter des jeweiligen Installers genau bekannt sind.
Installationsort vorgeben
Einige Pakete unterstützen die Angabe eines Installationsortes.
Dafür steht:
--location
beziehungsweise:
-l
zur Verfügung.
Beispiel:
winget install --id <Paket-ID> --exact --location "D:\Programme\Anwendung"
Ob dieser Pfad tatsächlich verwendet werden kann, hängt vom jeweiligen Installer ab.
Winget kann einem Installer keine Fähigkeit aufzwingen, die dieser selbst nicht besitzt.
Installation einer bereits vorhandenen Anwendung
Winget erkennt in vielen Fällen, dass eine Anwendung bereits installiert ist.
Soll verhindert werden, dass eine bestehende Installation im Rahmen des Befehls aktualisiert wird, steht:
--no-upgrade
zur Verfügung.
Das kann in Skripten hilfreich sein, wenn wirklich nur fehlende Software installiert werden soll.
Praktisches Beispiel: Firefox installieren
Zuerst suchen:
winget search firefox
Anschließend Paket prüfen:
winget show --id Mozilla.Firefox --exact
Dann installieren:
winget install --id Mozilla.Firefox --exact
Für eine möglichst unbeaufsichtigte Installation:
winget install --id Mozilla.Firefox --exact --silent --accept-package-agreements --accept-source-agreements
Praktisches Beispiel: Git installieren
Paket suchen:
winget search git
Eindeutige ID überprüfen:
winget show --id Git.Git --exact
Installation:
winget install --id Git.Git --exact
Automatisiert:
winget install --id Git.Git --exact --silent --accept-package-agreements --accept-source-agreements
Praktisches Beispiel: Visual Studio Code
Suchen:
winget search "Visual Studio Code"
Paketinformationen:
winget show --id Microsoft.VisualStudioCode --exact
Installieren:
winget install --id Microsoft.VisualStudioCode --exact
Damit lässt sich Visual Studio Code ohne manuelles Aufrufen der Hersteller-Webseite installieren.
Praktisches Beispiel: PowerToys
Microsoft PowerToys lässt sich ebenfalls bequem installieren:
winget install --id Microsoft.PowerToys --exact
Vorher können die Paketinformationen kontrolliert werden:
winget show --id Microsoft.PowerToys --exact
Praktisches Beispiel: Entwickler-PC vorbereiten
Ein frisch installierter Entwickler-PC könnte beispielsweise mehrere Werkzeuge benötigen.
Aktuelle Winget-Versionen ermöglichen dafür einen gemeinsamen Aufruf:
winget install Microsoft.VisualStudioCode Microsoft.PowerShell Git.Git
Winget verarbeitet die Pakete nacheinander.
Bei zehn, zwanzig oder mehr Anwendungen wird ein einzelner Befehl jedoch schnell unübersichtlich.
Dann sind andere Winget-Funktionen geeigneter:
winget export / import
oder:
winget configure
Diese Funktionen behandeln wir in späteren Teilen unserer Serie ausführlich.
Empfohlenes Vorgehen für Administratoren
Für den administrativen Einsatz hat sich ein kontrollierter Ablauf bewährt:
1. Paket suchen
↓
2. Paket-ID feststellen
↓
3. Paket mit show kontrollieren
↓
4. Quelle prüfen
↓
5. Version prüfen
↓
6. Installation testen
↓
7. Silent-Installation testen
↓
8. Erst danach automatisieren
Ein typischer produktiver Befehl könnte anschließend beispielsweise so aussehen:
winget install --id Git.Git --exact --source winget --silent --accept-package-agreements --accept-source-agreements
Damit wird wesentlich genauer definiert, was, woher und wie installiert werden soll.
Sicherheit: Nicht einfach alles installieren
Winget macht Softwareinstallationen sehr bequem. Diese Bequemlichkeit sollte jedoch nicht dazu führen, Sicherheits- und Freigabeprozesse zu umgehen.
Gerade in Unternehmen und Behörden sollten weiterhin geprüft werden:
- Ist die Software freigegeben?
- Wird sie dienstlich benötigt?
- Ist die Lizenzierung geklärt?
- Ist der Hersteller vertrauenswürdig?
- Welche Version darf eingesetzt werden?
- Welche Paketquelle wird verwendet?
- Benötigt die Software Administratorrechte?
- Welche zusätzlichen Komponenten werden installiert?
- Entspricht die Software den Sicherheitsrichtlinien?
Winget automatisiert die technische Installation – es ersetzt kein Softwarefreigabeverfahren.
Vorsicht bei Sicherheitsoptionen
Winget besitzt unter anderem die Option:
--ignore-security-hash
Damit kann ein fehlgeschlagener Installer-Hash-Check ignoriert werden. Microsoft kennzeichnet diese Verwendung ausdrücklich als nicht empfohlen.
Im normalen Betrieb sollte diese Option nicht verwendet werden.
Die Hash-Prüfung gehört zu den wichtigen Sicherheitsmechanismen von Winget und sollte nicht ohne zwingenden und nachvollziehbaren Grund umgangen werden.
Hilfe für install anzeigen
Da Winget kontinuierlich weiterentwickelt wird, lohnt sich immer ein Blick in die Hilfe der lokal installierten Version:
winget install --help
Für die Suche:
winget search --help
Und für Paketinformationen:
winget show --help
Damit sehen Sie genau die Optionen, die Ihre eingesetzte Winget-Version unterstützt.
Die wichtigsten Befehle dieses Artikels
Software suchen:
winget search <Suchbegriff>
Nach Paket-ID suchen:
winget search --id <Paket-ID>
Paketinformationen anzeigen:
winget show --id <Paket-ID> --exact
Paket eindeutig installieren:
winget install --id <Paket-ID> --exact
Silent installieren:
winget install --id <Paket-ID> --exact --silent
Vereinbarungen automatisiert akzeptieren:
winget install --id <Paket-ID> --exact --accept-package-agreements --accept-source-agreements
Bestimmte Version installieren:
winget install --id <Paket-ID> --exact --version <Version>
Architektur bestimmen:
winget install --id <Paket-ID> --exact --architecture x64
Installer-Typ bestimmen:
winget install --id <Paket-ID> --exact --installer-type msi
Quelle bestimmen:
winget install --id <Paket-ID> --exact --source winget
Damit steht bereits ein sehr leistungsfähiger Werkzeugkasten für reproduzierbare Windows-Installationen zur Verfügung.
winget install sieht zunächst wie ein einfacher Installationsbefehl aus. Tatsächlich bietet Winget jedoch zahlreiche Möglichkeiten, genau zu bestimmen, welche Anwendung in welcher Version, Architektur und Installationsvariante eingerichtet werden soll.
Besonders wichtig ist dabei die Verwendung eindeutiger Paket-IDs. Die Kombination
winget install --id <Paket-ID> --exact
sollte insbesondere bei Skripten und automatisierten Installationen dem einfachen Programmnamen vorgezogen werden.
Mit --silent, --version, --architecture, --installer-type, --scope und --source lässt sich der Installationsvorgang anschließend weiter präzisieren.
Damit entwickelt sich Winget von einem komfortablen Werkzeug für Einzelinstallationen zu einer leistungsfähigen Grundlage für standardisierte Windows-Arbeitsplätze, Entwicklerumgebungen und automatisierte Softwarebereitstellungen.