Windows System

Winget Teil 5 – Software suchen und effizient installieren

Ein Programmname genügt – und Winget sucht die passende Anwendung, lädt den Installer herunter und führt die Installation aus. Doch hinter winget install stecken zahlreiche Möglichkeiten: eindeutige Paket-IDs, exakte Suchabfragen, bestimmte Versionen, Silent-Installationen, unterschiedliche Architekturen und Installer-Typen sowie die Installation mehrerer Programme in einem Durchgang. In diesem Teil der Serie zeigen wir ausführlich, wie Software mit Winget gezielt und reproduzierbar installiert wird.

10 min Lesezeit
Grafik: Winget - Software suchen und installieren

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.