Einleitung
Wer professionelles Software-Packaging betreibt, weiß: Ein einfacher Silent-Switch wie /quiet oder /silent reicht in der Enterprise-Welt oft nicht aus. In einer idealen Welt würden alle Installer perfekt funktionieren, saubere Exit-Codes zurückgeben und keine Interaktion erfordern. Die Realität sieht anders aus: Installer hängen an versteckten Dialogen, benötigen spezifische Vorbereitungen (wie das Schließen von Programmen) oder hinterlassen unsaubere Reste, die eine Neuinstallation verhindern.
Hier kommt das PSAppDeployToolkit (PSADT) ins Spiel. In der vorangegangenen Sektion haben wir die Architektur des Toolkits kennengelernt. Jetzt gehen wir einen entscheidenden Schritt weiter: Wir integrieren PSADT in Microsoft Intune. Die Herausforderung dabei ist, dass Intune standardmäßig „blind“ ein Paket ausführt. PSADT hingegen ist ein Framework, das eine eigene Logik, eine Benutzeroberfläche (UI) und ein mächtiges Logging mitbringt. Um diese Vorteile in Intune zu nutzen, müssen wir PSADT korrekt „wrappen“ und die Kommunikation zwischen dem Intune Management Extension (IME) Agenten und dem Toolkit orchestrieren.
In dieser Masterclass lernst du, wie du PSADT-Pakete so konfigurierst, dass sie nahtlos in Intune laufen, wie du die Benutzeroberfläche für Endbenutzer steuerst und wie du Wrapper-Skripte einsetzt, um maximale Kontrolle über den Deployment-Prozess zu gewinnen.
Grundkonzepte: Die Brücke zwischen Intune und PSADT
Um PSADT in Intune zu integrieren, muss man verstehen, wie die Ausführungskette funktioniert. Wenn Intune eine Win32-App installiert, wird der Befehl im System-Kontext (oder Benutzer-Kontext) ausgeführt. Wenn wir PSADT nutzen, rufen wir nicht direkt die setup.exe auf, sondern das Skript Deploy-Application.ps1.
Der „Double-Hop“ der Ausführung
Ein häufiger Fehler ist der Versuch, PSADT einfach als Startbefehl anzugeben. Da PowerShell-Skripte standardmäßig blockiert sind (Execution Policy) und Intune spezifische Anforderungen an die Parameterübergabe hat, nutzen wir einen standardisierten Aufruf. Der Kern der Integration liegt darin, das Toolkit so zu starten, dass es seine internen Funktionen laden kann, bevor die eigentliche Installation beginnt.
Das Konzept der Wrapper-Skripte
Ein Wrapper ist im Grunde ein Start-Skript, das die Umgebung für das eigentliche Paket vorbereitet. Bei PSADT ist das Deploy-Application.ps1 bereits ein Wrapper. Wenn wir jedoch komplexere Anforderungen haben (z.B. das dynamische Setzen von Parametern basierend auf Intune-Variablen), setzen wir manchmal einen weiteren, minimalistischen PowerShell-Wrapper davor. In 95% der Fälle ist jedoch das Toolkit selbst der Wrapper, den wir über den MSI- oder EXE-Installer legen.
UI-Modi: Interaktiv vs. Silent
Das Alleinstellungsmerkmal von PSADT ist die UI. Intune installiert Apps normalerweise komplett im Hintergrund (Silent). PSADT ermöglicht es uns, diesen Modus zu steuern:
- Silent Mode: Keine Benachrichtigungen, keine Fenster. Ideal für Standard-Rollouts.
- Interactive Mode: Der Benutzer sieht Pop-ups, kann die Installation verschieben (Snooze) oder wird gewarnt, dass Programme geschlossen werden müssen.
Die Steuerung erfolgt über den Parameter -DeploymentType (Install/Uninstall) und den Modus -AllowReboot sowie die globalen Einstellungen in der AppDeployToolkitConfig.xml.
Praxis-Implementierung: Step-by-Step Integration
1. Die Paketstruktur vorbereiten
Bevor wir das Paket in .intunewin verpacken, muss die PSADT-Struktur absolut konsistent sein. Ein typisches Paket sieht so aus:
MeinAppPaket/
├── AppDeployToolkit/ (Die Toolkit-Kernfiles)
├── Files/ (Hier liegt die setup.exe oder .msi)
├── Support/ (Zusatzdateien, XMLs, Configs)
└── Deploy-Application.ps1 (Das Hauptskript)
2. Die Konfiguration der Deploy-Application.ps1
Damit das Skript in Intune funktioniert, müssen wir die Sektion INSTALLATION im Skript so anpassen, dass sie die PSADT-Funktionen nutzt. Anstatt Start-Process zu verwenden, nutzen wir Execute-MSI oder Execute-Process.
## Beispiel für die Installation einer MSI innerhalb von PSADT
Execute-MSI -Action 'Install' -Path 'YourApp.msi' -Parameters '/qn /norestart'
3. Der korrekte Intune-Installationsbefehl
Dies ist der kritischste Punkt. Wenn du das Paket in Intune hochlädst, darfst du nicht einfach nur das Skript angeben. Du musst die PowerShell-Umgebung korrekt adressieren, die Execution Policy umgehen und die Parameter übergeben. Der Gold-Standard-Befehl für PSADT in Intune lautet:
powershell.exe -ExecutionPolicy Bypass -File "Deploy-Application.ps1" -DeploymentType "Install" -DeployMode "Silent"
Wichtige Parameter-Erklärung:
-ExecutionPolicy Bypass: Verhindert, dass das Skript aufgrund von Windows-Sicherheitsrichtlinien blockiert wird.-DeploymentType "Install": Sagt dem Toolkit, dass es die Installations-Logik ausführen soll.-DeployMode "Silent": Unterdrückt die UI. Wenn du möchtest, dass der User Interaktionen sieht, ändere dies auf"Interactive"(Achtung: funktioniert nur, wenn die App im Benutzer-Kontext installiert wird!).
4. Die Deinstallations-Strategie
Ein professionelles Paket ist erst fertig, wenn die Deinstallation ebenso sauber funktioniert wie die Installation. In Intune gibst du für den Uninstall-Befehl an:
powershell.exe -ExecutionPolicy Bypass -File "Deploy-Application.ps1" -DeploymentType "Uninstall" -DeployMode "Silent"
Innerhalb der Deploy-Application.ps1 definierst du dann in der Sektion UNINSTALLATION genau, wie die Software entfernt wird, inklusive des Löschens von Registry-Keys oder Ordnern, die der Standard-Uninstaller ignoriert.
Best Practices für Wrapper-Skripte & UI
Umgang mit dem Benutzer-Kontext (User Context)
Standardmäßig installiert Intune als SYSTEM. In diesem Modus sieht der Benutzer keine PSADT-Fenster, da SYSTEM in einer anderen Session läuft als der angemeldete Benutzer. Wenn du die UI nutzen willst (z.B. für eine „Bitte schließen Sie Outlook“-Warnung), hast du zwei Optionen:
- Installation im User-Kontext: In den Intune-App-Einstellungen „Install behavior“ auf „User“ stellen. Das Toolkit kann nun direkt mit dem User interagieren.
- ServiceUI.exe (Der Profi-Weg): Wenn du im System-Kontext installieren musst, aber dennoch eine UI anzeigen willst, musst du die
ServiceUI.exe(aus dem Microsoft Deployment Toolkit – MDT) in dein Paket integrieren. Der Aufruf in Intune sieht dann so aus:ServiceUI.exe -process:explorer.exe powershell.exe -ExecutionPolicy Bypass -File "Deploy-Application.ps1" -DeploymentType "Install" -DeployMode "Interactive"Dies „springt“ aus der SYSTEM-Session in die aktive Benutzer-Session und rendert die PSADT-Dialoge sichtbar.
Optimierung der UI-Erfahrung
Nutze die integrierten Funktionen von PSADT, um die User Experience (UX) zu verbessern:
Show-InstallationWelcome: Begrüßt den Nutzer und erklärt, was passiert.Show-InstallationPrettyProgress: Zeigt einen Fortschrittsbalken anstatt eines schwarzen Konsolenfensters.Block-Application: Schließt kritische Programme automatisch oder fragt den Nutzer, ob er sie schließen möchte, bevor die Installation startet.
Logging-Strategie
PSADT schreibt standardmäßig Logs nach C:\Windows\Logs\Software. Dies ist ein riesiger Vorteil gegenüber Standard-Intune-Installationen. Verlasse dich nicht auf das Intune-Portal (das oft nur „Error 0x80070005“ anzeigt), sondern analysiere die PSADT-Logs. Sie zeigen dir exakt, welcher Befehl in welcher Sekunde mit welchem Exit-Code fehlgeschlagen ist.
Troubleshooting: Wenn die Integration hakt
Problem: App bleibt in Intune auf „Installing“ hängen
Ursache: Meistens ein verstecktes Dialogfenster. Wenn du -DeployMode "Silent" verwendest, aber im Skript eine Funktion aufrufst, die eine Eingabe erwartet, wartet das Skript ewig auf eine Antwort, die niemals kommt, da kein Fenster sichtbar ist.
Lösung: Prüfe alle Execute-Process Aufrufe. Stelle sicher, dass alle installierten Programme wirklich mit /quiet oder /qn aufgerufen werden. Nutze die PSADT-Logs, um zu sehen, bei welchem Schritt der Zeitstempel stehen bleibt.
Problem: „Script execution is disabled on this system“
Ursache: Die Execution Policy von PowerShell verhindert den Start.
Lösung: Stelle sicher, dass im Intune-Installationsbefehl -ExecutionPolicy Bypass steht. Verlasse dich niemals darauf, dass die Richtlinie auf dem Client bereits „RemoteSigned“ ist.
Problem: UI wird trotz ServiceUI.exe nicht angezeigt
Ursache: Die ServiceUI.exe findet den Explorer-Prozess nicht oder wird durch Antiviren-Software/EDR blockiert, da das „Session-Hopping“ verdächtig aussieht.
Lösung: Teste das Paket lokal mit dem Tool PsExec: psexec -s -i 1 cmd.exe. Wenn es dort funktioniert, liegt es an den Berechtigungen oder der Sicherheitssoftware in der Intune-Umgebung.
Fazit
Die Integration von PSADT in Intune verwandelt eine einfache Softwareverteilung in einen professionellen Deployment-Prozess. Durch den Einsatz von Wrapper-Logik, der gezielten Steuerung der UI via ServiceUI.exe und einer konsistenten Parameterübergabe eliminierst du die „Black Box“ der Win32-App-Installation.
Zusammenfassung der Masterclass-Regeln:
- Nutze immer
-ExecutionPolicy Bypass. - Setze
-DeployMode "Silent"für unbemerktes Deployment und"Interactive"für User-Kommunikation. - Integriere
ServiceUI.exefür SYSTEM-Installationen mit UI. - Analysiere Fehler in
C:\Windows\Logs\Software, nicht im Intune-Portal. - Verwende
Execute-MSIundExecute-Processanstelle von rohen PowerShell-Befehlen, um vom Toolkit-Logging zu profitieren.
Mit diesen Techniken bist du in der Lage, selbst die widerspenstigsten Legacy-Applikationen stabil und benutzerfreundlich über Intune zu verteilen.