Winget, der neue Paketmanager für Windows, revolutioniert die Softwarebereitstellung, indem er den Prozess der Installation und Verwaltung von Anwendungen vereinfacht. Das PowerShell-Modul PSAppDeployToolkit verbessert diese Funktionalität weiter, indem es zusätzliche Funktionen für die Bereitstellung von Winget-Paketen bietet. Dieser Artikel führt Dich durch den Prozess der Verwendung von PSAppDeployToolkit zur Bereitstellung von Winget-Paketen mithilfe von Microsoft Intune, einem cloudbasierten Verwaltungsdienst für Windows-Geräte.

Die Herausforderung der Winget-Bereitstellung im Systemkontext

Winget ist in erster Linie für Benutzeranwendungen konzipiert und unterstützt nativ keine Installationen auf Systemebene. Die meisten Benutzer sind jedoch (oder sollten zumindest) Standardbenutzer ohne Administratorrechte. Doch kein Administratorzugriff bedeutet oft unzureichende Rechte, um Aufgaben wie das Ändern von Systemdateien oder Registereinstellungen durchzuführen, die häufig für die Installation von Anwendungen auf Systemebene erforderlich sind.

Um diese Einschränkung zu überwinden, müssen wir den Pfad zur winget.exe auflösen, um ihn im Systemkontext zu verwenden.
Dies kann wie folgt erfolgen:

$winget_exe = Resolve-Path "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_*__8wekyb3d8bbwe\winget.exe"
if ($winget_exe.count -gt 1){
        $winget_exe = $winget_exe[-1].Path
}
if (!$winget_exe){Write-Error "Winget not installed"}Code language: PowerShell (powershell)

Damit können wir von nun an winget in unserer aktiven Session aufrufen:

& $winget_exeCode language: PHP (php)

Deploying Winget Apps mit PSAppDeployToolkit

Nun, da wir wissen, wie wir winget im Systemkontext aufrufen können, können wir das Paket mit PSAppDeployToolkit erstellen.
Füge dazu den folgenden Befehl zu den entsprechenden Abschnitten in deiner Deploy-Application.ps1 hinzu:

Installationsroutine

# Resolve winget.exe
$winget_exe = Resolve-Path "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_*__8wekyb3d8bbwe\winget.exe"
if ($winget_exe.count -gt 1){
        $winget_exe = $winget_exe[-1].Path
}
if (!$winget_exe){Write-Error "Winget not installed"}
# Installation via winget
& $winget_exe install "Notepad++.Notepad++" --silent --accept-source-agreements --accept-package-agreementsCode language: PHP (php)

Deinstallationsroutine

# Resolve winget.exe
$winget_exe = Resolve-Path "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_*__8wekyb3d8bbwe\winget.exe"
if ($winget_exe.count -gt 1){
        $winget_exe = $winget_exe[-1].Path
}
if (!$winget_exe){Write-Error "Winget not installed"}
# Installation via WinGet
& $winget_exe uninstall "Notepad++.Notepad++" --silentCode language: PHP (php)

Detaillierte Erklärung

Die vorherigen Abschnitte gaben einen kurzen Überblick über den Prozess der Bereitstellung von Winget-Paketen mit PSAppDeployToolkit und Intune. Für ein tieferes Verständnis lese meinen Artikel auf der Homepage von TekkiGurus.

Dieser Artikel geht auf die technischen Aspekte des Bereitstellungsprozesses ein, behandelt Themen wie:

  • Arten von Winget-Anwendungen
  • Winget-Attribute
  • Winget als Benutzer vs. System
  • Erstellen des PSAppDeployToolkit-Pakets
  • Optionen für Erkennungsregeln in Intune für winget
  • Erstellen einer intunewin-Datei mit dem Win32 Content Prep Tool
  • Bereitstellung des App-Pakets auf Geräten
  • Integration von PSAppDeployToolkit mit Intune

Durch ein gründliches Verständnis der detaillierten Erläuterungen im Originalartikel kannst Du Winget-Paketbereitstellungen effektiv mit PSAppDeployToolkit und Intune umsetzen.

Ausserdem findest du hier das Paket, das ich als Beispiel in diesem und dem anderen Artikel erstellt habe: