# Intune App-Manager – Web Edition Modernes Web-Frontend fuer den Intune App-Zuweisungs-Manager. PowerShell startet einen lokalen HTTP-Server, der das Frontend ausliefert und die Microsoft Graph-Aufrufe ausfuehrt. ## Voraussetzungen - Windows mit PowerShell 5.1 oder PowerShell 7+ - Modul `Microsoft.Graph.Authentication` (wird beim ersten Connect benoetigt): ```powershell Install-Module Microsoft.Graph.Authentication -Scope CurrentUser -Force ``` - Browser (Edge, Chrome, Firefox) ## Start ```powershell cd "c:\Temp\claude.code\Intune App Management\Intune-App-Manager-Web" .\Start.ps1 ``` Optionen: | Parameter | Standard | Beschreibung | |---------------|-----------------------------------------|---------------------------------------------| | `-Port` | `8077` | Port des lokalen HTTP-Servers | | `-TenantId` | (HanseMerkur Default) | Microsoft Entra Tenant-ID | | `-ClientId` | (HanseMerkur Default) | App-Registrierung Client-ID | | `-NoBrowser` | aus | Browser nicht automatisch oeffnen | Beispiele: ```powershell .\Start.ps1 -Port 8088 .\Start.ps1 -TenantId "..." -ClientId "..." .\Start.ps1 -NoBrowser ``` Beenden: `Ctrl+C` im Terminal. ## Workflow 1. **Verbinden** – oben rechts klicken; Microsoft Login-Fenster oeffnet sich. 2. **Modus waehlen**: Abteilungen / RPA-Gruppen / Einzel-User. 3. **Ziele laden** – ueber "Laden" (User: in Suchfeld tippen). 4. **Ziele markieren** mit Checkboxen. 5. **Apps laden** – ueber "Laden" rechts neben "Apps". 6. **Pillen klicken** – jede gruene Pille bei einer App ist eine zugewiesene Gruppe. Klick = "Ausgewaehlte Ziele dieser Gruppe hinzufuegen". Erneuter Klick = entfernen. 7. **Required-Gruppe erstellen** – falls noetig, ueber "+ Required-Gruppe" bei der App. 8. **Session pruefen** – rechts werden alle geplanten Operationen aufgelistet. 9. **Ausfuehren** – gruener Button rechts unten. HTML-Report erscheint automatisch nach Abschluss. ## Pillen-Farben (App-Zeile) | Farbe | Bedeutung | |-------------|-------------------------------------------------------------------| | Grau | Gruppe ist der App zugewiesen, Ziele sind keine Mitglieder | | Gruen | Alle ausgewaehlten Ziele sind bereits Mitglied | | Gelb | Einige Ziele sind Mitglied (Partial) | | Cyan | Native Target (All Users / All Devices) – nicht aenderbar | | Blau | Aktuell zur Session hinzugefuegt | | Gestrichelt | "+ Required-Gruppe" Button | ## Architektur ``` Intune-App-Manager-Web/ ├── Start.ps1 Entry Point ├── README.md diese Datei ├── src/ │ ├── Models.ps1 Hilfen / Datenklassen │ ├── Graph.ps1 Microsoft Graph API Helpers │ ├── Server.ps1 HTTP-Server (HttpListener) │ ├── Router.ps1 Request-Routing │ └── Api.ps1 REST-API-Endpoints └── www/ ├── index.html SPA-Shell ├── styles.css Modernes Dark Theme └── app.js Frontend-Logik (Vanilla JS) ``` Reports werden in `%TEMP%\IntuneAppManager-Reports\` gespeichert und sind ueber `http://localhost:/reports/.html` erreichbar. ## REST-API (intern) | Methode | Pfad | Zweck | |---------|----------------------------------------------|------------------------------------| | GET | `/api/status` | Verbindungsstatus | | POST | `/api/connect` | Microsoft Graph verbinden | | POST | `/api/disconnect` | Trennen | | GET | `/api/groups` | Abteilungs-Gruppen (`abt-hm-*`) | | GET | `/api/groups/rpa` | 3 vordefinierte RPA-Gruppen | | POST | `/api/groups` | Neue Required-Gruppe erstellen | | POST | `/api/groups/check` | Gruppen-Name pruefen | | GET | `/api/groups/{id}/members` | Mitglieder einer Gruppe | | GET | `/api/users?q=...` | User suchen | | GET | `/api/apps` | Apps laden (cached) | | GET | `/api/apps?refresh=true` | Apps neu laden | | GET | `/api/membership?targets=...&groupId=...` | Mitgliedschafts-Status pruefen | | POST | `/api/assignments/apply` | Geplante Zuweisungen ausfuehren | ## Hinweise - **Single-User-App** – der lokale HTTP-Server nimmt nur eine Verbindung zur Zeit zuverlaessig an. Den Browser-Tab bitte einzeln halten. - **Auth lebt im PowerShell-Prozess** – Disconnect oder Schliessen des Terminals beendet die Session. - **Cache** – Apps werden im Server-Prozess gecached (Refresh-Knopf zum Neuladen). Membership-Cache wird bei Aenderung der Ziel-Auswahl geleert.