v0.1.24 — App Report, CSV Import, Read-Only Mode, Group Management

- App Report: Installationszähler pro App via Graph $batch (deviceStatuses)
- Geräte-Export: CSV mit Maschinennamen pro App (GET /api/apps/devicestatus)
- CSV-Import: Massenimport von Benutzern in Gruppen mit Header-Erkennung
- Read-Only-Modus: Schreib-Tabs/Buttons automatisch ausblenden
- Ergebnis-Banner nach CSV-Import (hinzugefügt/bereits Mitglied/Fehler/nicht gefunden)
- Dokumentation aktualisiert (README, help.md, CHANGELOG)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 07:12:49 +02:00
co-authored by Claude Sonnet 4.6
commit 34811ff583
24 changed files with 17052 additions and 0 deletions
+324
View File
@@ -0,0 +1,324 @@
# Intune Manager — Hilfe
Web-Frontend für Microsoft Intune. Lädt Apps und Gruppen aus deinem Tenant über Microsoft Graph und macht das Verwalten von Zuweisungen schneller als im Intune-Portal selbst.
---
## Schnellstart in 5 Schritten
1. **Verbinden** — oben rechts *Anmelden* klicken → Microsoft-Anmeldefenster bestätigen.
2. **Tab wählen** — Topbar: *App Management* (Standard), *Group Management* oder *App Report*.
3. **Empfänger wählen** (App Management) — linke Spalte: Abteilung, RPA oder Benutzer markieren.
4. **Zuweisung sammeln** — bei einer App auf **Available** oder **Required** klicken.
5. **Ausführen** — rechts unten *Zuweisungen ausführen*. HTML-Report öffnet sich automatisch.
---
## Navigation
Der Header enthält drei Tabs:
| Tab | Funktion |
|---|---|
| **App Management** | Haupt-Workflow: Apps laden, Gruppen zuweisen und entfernen |
| **Group Management** | Mitglieder anzeigen, exportieren, hinzufügen, CSV-Import |
| **App Report** | Installationszähler pro App, Geräte-Export als CSV |
> Im **Read-Only-Modus** (Fallback auf eingeschränkte App-ID) sind die Tabs *Benutzer hinzufügen* und *CSV-Import* ausgeblendet. Alle Schreib-Buttons verschwinden automatisch.
---
## App Management — der Hauptworkflow
### Das mentale Modell
Das Tool ändert **nicht die App-Zuweisungen selbst** — die Liste der Available/Required-Gruppen einer App bleibt unverändert. Stattdessen ändert es die **Mitgliedschaften in genau diesen Gruppen**. Beispiel:
- App *Beispiel-App* hat die Required-Gruppe `intune-win-app-<slug>-required` zugewiesen.
- Du wählst links die Abteilung `<dept-prefix>-team-controlling`.
- Klick auf die *Required*-Pille → Operation wandert in die Session.
- Beim Ausführen wird `<dept-prefix>-team-controlling` als Mitglied in der Required-Gruppe aufgenommen.
- Intune zieht beim nächsten Sync alle Mitglieder als Required-Targets.
### Schritt-für-Schritt
1. **Empfänger markieren** (linke Spalte) — Modi mischbar: Abteilungen + RPA + Benutzer gleichzeitig. Die *Pinned-Targets*-Leiste zeigt alles Aktive.
2. **Apps durchgehen** (mittlere Spalte) — Filter oder Suchfeld nutzen.
3. **Available- oder Required-Button klicken**:
- *Eine Gruppe*: Empfänger direkt zur Session hinzufügen.
- *Mehrere Gruppen* (Count-Badge): Picker öffnet sich.
- *Keine Gruppe* dieses Typs: Button deaktiviert.
4. **Session prüfen** (rechte Spalte) — alle gesammelten Vorgänge als Vorschau.
5. **Ausführen** — rechts unten. Report öffnet automatisch.
### Pillen-Farben
| Optik | Bedeutung |
|---|---|
| Neutral | Standard — kein Empfänger gewählt oder noch nicht geprüft |
| **Grüner Rahmen + Häkchen** | Alle Empfänger bereits Mitglied |
| **Gelber Rahmen + halbes Häkchen** | Teilweise Mitglied |
| **Schwarz gefüllt + Count-Badge** | Aktiv in der Session (Toggle: erneuter Klick entfernt) |
| Kursiv, ausgegraut | Nur native Zuweisung (All Users/Devices) — keine Gruppe änderbar |
### Gruppen aus App entfernen (−R / −A)
Jede App-Zeile zeigt rechts **−R** (Required entfernen) und **−A** (Available entfernen).
- Klick auf −R / −A → Picker mit allen Gruppen dieses Typs → Gruppe auswählen → sofortiges Löschen der Zuweisung (nach Bestätigung).
- Bei nativen Zuweisungen (All Users/All Devices) erscheint stattdessen der Mülleimer-Icon direkt im Detail-Panel.
### Plus-Button — Zuweisung hinzufügen
Modal mit 6 Optionen:
**REQUIRED** — Neue Gruppe / All Users / All Devices
**AVAILABLE** — Neue Gruppe / All Users / All Devices
Bereits aktive native Kombinationen werden **ausgegraut** (verhindert Duplikate).
### Die Session (rechte Spalte)
Pro Eintrag: App-Name + Gruppen-Name + Empfänger-Tag + A/R-Badge + X-Entfernen.
Darunter Gesamtzahl — der Apply-Button zeigt diese Zahl.
### Ausführen und Report
- Member-Add pro Session-Eintrag
- Native Targets werden übersprungen
- Bereits-Mitglied = „OK" — kein Fehler
- HTML-Report in `%TEMP%\IntuneAppManager-Reports\`
---
## Group Management
### Mitglieder & Export
- Gruppe links suchen und auswählen
- Mitgliederliste inkl. verschachtelter Gruppen
- Filter zum Einschränken der Anzeige
- **Als CSV exportieren** → `members-<Gruppe>-<Datum>.csv`
### Benutzer hinzufügen *(nur Read/Write)*
- Benutzer per Name, UPN oder E-Mail suchen
- Mehrere auswählen und gemeinsam zur gewählten Gruppe hinzufügen
### CSV-Import *(nur Read/Write)*
Massenimport von Benutzern per CSV-Datei oder direkter Eingabe.
**Ablauf:**
1. Gruppe links auswählen
2. CSV hochladen **oder** UPNs/E-Mails einfügen (eine pro Zeile)
3. **„Benutzer auflösen"** → Graph-Lookup → Vorschau mit ✓/✗
4. **„Gefundene importieren"** → Benutzer werden zur Gruppe hinzugefügt
**CSV-Format:** Header-Erkennung für `UserPrincipalName`, `Mail`, `Email`, `UPN`.
Ohne Header: erste Spalte mit `@` wird verwendet. Quoted fields und `,`/`;`/Tab als Trennzeichen werden unterstützt.
**Ergebnis-Banner nach Import:**
| Chip | Bedeutung |
|---|---|
| ✔ Grün | Erfolgreich hinzugefügt |
| ≈ Gelb | Bereits Mitglied |
| ✗ Rot | Fehler (Meldung in der Tabelle) |
| Grau | UPN in Graph nicht gefunden |
---
## App Report
- **Neu laden** — lädt Installationszähler für alle Apps (kann 1–2 Min. dauern)
- Tabelle sortierbar per Klick auf Spaltenheader (▲/▼)
- Suchfeld filtert nach Name, Publisher, Typ
- **Als CSV exportieren** — exportiert die gefilterte Tabelle
- **Geräte-Export** (Button pro Zeile) — lädt alle Geräte mit Installationsstatus für diese App als CSV
> Zählwerte erfordern die Berechtigung `DeviceManagementManagedDevices.Read.All` in der Azure App-Registration. Fehlt sie, zeigen alle Spalten 0.
---
## Header
| Element | Funktion |
|---|---|
| **Logo** | Kann in den Einstellungen durch eigenes Firmenlogo ersetzt werden |
| **App Management / Group Management / App Report** | Haupt-Navigation |
| **Einstellungen** (Zahnrad) | Tenant/Client-ID, Naming, Farben, Logo |
| **Hilfe** (Fragezeichen) | Diese Seite |
| **Theme-Toggle** | Light/Dark-Mode — wird im LocalStorage gemerkt |
| **Avatar** | Angemeldeter Account — Mouseover zeigt vollen UPN; grüner Punkt = verbunden |
| **Logout** | Trennt die Graph-Verbindung |
---
## Read-Only-Modus
Ist nur eine Read-Only-App-ID konfiguriert (oder schlägt die RW-Anmeldung fehl), schaltet das Tool automatisch in den **Read-Only-Modus**:
- Toast-Meldung „(Read Only)" beim Verbinden
- Alle Schreib-Buttons/Tabs werden ausgeblendet (`body.read-only`-CSS-Klasse)
- Sichtbar bleibt: App-Liste, Mitglieder-Ansicht, Export-Funktionen, App Report
---
## Linke Spalte — Empfänger
Drei Modi via Segment-Switch:
- **Abteilung** — Gruppen mit konfigurierten Präfixen (mehrere möglich)
- **RPA** — explizit in den Einstellungen gelistete Gruppen
- **Benutzer** — Live-Suche über Graph (min. 2 Zeichen)
**Gruppen aufklappen** → Mitglieder inline → *Benutzer übernehmen* in den User-Modus.
**Icons pro Eintrag:**
| Icon | Wirkung |
|---|---|
| Externer Link | Gruppe/User im Intune-Portal öffnen |
| Zwei Personen | Mitglieder-Ansicht im Intune-Portal |
| Teams-T | Direkt-Chat starten (Teams-Desktop) |
---
## Mittlere Spalte — Apps
### Filter
| Filter | Zweck |
|---|---|
| Suchfeld | Volltext im App-Namen |
| Dropdown | Preset: Alle / Ohne Zuweisungen / Nur Available / Nur Required / Mehrere / All Users / All Devices / Intune / pro Vendor |
| Bereits Gruppenmitglied | Nur Apps wo Empfänger schon Mitglied ist |
| All Users/Devices ausblenden | Native Zuweisungen rausnehmen |
| Geändert (Datumsrange) | Nach Last-Modified-Datum filtern |
### App-Zeile
1. Status-Indikator (Häkchen)
2. App-Name + Hersteller → Klick öffnet Detail-Panel
3. Rename-Icon (Stift) / Lock bei Vendor-Apps
4. Source-Logo (Intune, PatchMyPC, Robopack, …)
5. Typ-Chip
6. Version
7. **Available**- und **Required**-Buttons mit Count
8. **−R** (Required-Gruppe entfernen) und **−A** (Available-Gruppe entfernen)
9. **Plus-Button** — Zuweisung hinzufügen
10. **Delete-Icon** — App löschen (bei Vendor-Apps: Lock)
---
## App-Detail (Klick auf App-Namen)
| Sektion | Inhalt |
|---|---|
| Zuweisungen | Available + Required mit Aktionen (Link, Mitglieder, Löschen) |
| Allgemein | Hersteller, Version, Typ, Min-OS |
| Beschreibung | Markdown-gerendert |
| Installation | Datei, Install-/Uninstall-Befehl (Copy-Icon) |
| Detection | Registry, Datei, MSI-Code, PowerShell |
| Return-Codes | Exit-Codes mit Typ |
| Meta | Erstellt + Geändert |
| Installationen | Geräte + Benutzer × Installiert/Fehler/Pending/N/A mit Erfolgsquote |
| Abhängigkeiten | SVG-Flow-Diagramm + Klartext; Klick auf Knoten springt zur Ziel-App |
| Supersedence | Was diese App ersetzt (update / replace) |
---
## Einstellungen
Persistiert in `%APPDATA%\IntuneAppManager-Web\settings.json`.
| Sektion | Inhalt |
|---|---|
| Verbindung | Tenant-ID, Client-ID (RW), Client-ID (RO), Scopes RW + RO |
| Abteilungs-Gruppen | Präfixe (eine pro Zeile) |
| RPA-Gruppen | Explizite Gruppennamen |
| Benutzer-Suche | Felder (DisplayName / UPN / Mail / Department) |
| Required-Naming | Präfix + Suffix |
| Available-Naming | Präfix + Suffix |
| Branding | Logo-Upload (PNG/JPG/SVG/WEBP/GIF, max. 2 MB) |
| Farben | 8 Akzentfarben + Standardfarben wiederherstellen |
---
## Benötigte Graph-Berechtigungen
| Funktion | Berechtigung |
|---|---|
| Apps anzeigen | `DeviceManagementApps.Read.All` |
| Gruppen / Mitglieder anzeigen | `GroupMember.Read.All` |
| Benutzer suchen | `User.Read.All` |
| Zuweisungen ändern | `DeviceManagementApps.ReadWrite.All` |
| Gruppen-Mitglieder ändern | `GroupMember.ReadWrite.All` |
| App Report / Geräte-Export | `DeviceManagementManagedDevices.Read.All` ⚠ |
> ⚠ Ohne `DeviceManagementManagedDevices.Read.All` zeigt der App Report 0 und der Geräte-Export liefert leere Dateien.
---
## Wichtige Einschränkungen
- **Vendor-Apps** (PatchMyPC, Robopack, …) können nicht gelöscht/umbenannt werden — Lock-Icon + HTTP 409.
- **Native Zuweisungen** (All Users / All Devices) sind je App und Intent einzigartig — Duplikate werden ausgegraut.
- **Required-Zuweisungen** werden beim nächsten Geräte-Sync erzwungen — bei Produktiv-Apps zuerst Available testen.
- **App-Löschung** ist irreversibel und entfernt alle Zuweisungen.
- **Cache**: Apps und Gruppen werden im PowerShell-Prozess gehalten — Refresh-Icon lädt neu.
---
## Vendor-Erkennung
Das Tool erkennt Vendor-Apps (PatchMyPC, Robopack, …) per konfigurierbaren Detection-Regeln in `settings.json → vendors[]`:
| Feld | Optionen |
|---|---|
| `field` | `commandLine`, `developer`, `publisher`, `displayName`, `notes`, `owner` |
| `match` | `contains`, `equals`, `startsWith`, `regex` |
| `pattern` | Suchstring oder Regex |
Erster Match gewinnt. Eigene Vendoren: neuen Eintrag im `vendors[]`-Array, Logo als `<id>.png` im Projekt-Root ablegen.
---
## Setup-Datei aktualisieren
Native Win32-Apps (`.intunewin`) können mit einer neuen Setup-Datei aktualisiert werden ohne die App neu anzulegen.
**Wo:** App-Detail → Abschnitt *Setup-Datei* → *Setup-Datei aktualisieren…*
**Ablauf:** lokalen Pfad auf dem Server-Rechner eingeben → optionale neue Versionsnummer → Bestätigung → *Hochladen & aktivieren*
> **Achtung:** Ersetzt die ausgerollte Version für alle zugewiesenen Geräte. Nicht rückgängig machbar — zuerst an einer Test-App ausprobieren.
---
## Tastatur / Tipps
- **Ctrl+F5** — Hard-Refresh (Pflicht nach Tool-Updates)
- **Esc** — Modal schließen
- **Enter** im Umbenennen-Dialog — speichern
- **Klick auf App-Zeile** außerhalb Buttons — Detail öffnen/schließen
---
## Fehlerbehebung
| Symptom | Lösung |
|---|---|
| „User canceled authentication" | WAM-Fenster ist hinter anderen Fenstern — in Taskleiste suchen |
| Apps laden sehr lange | Bei > 1000 Apps normal (10–30 s); danach gecached |
| Änderungen wirken nicht | **Ctrl+F5** (Browser-Cache) |
| App Report zeigt nur 0 | `DeviceManagementManagedDevices.Read.All` fehlt in der App-Registration |
| Geräte-Export ist leer | Gleiche Ursache wie App Report |
| Read-Only-Modus obwohl RW gewünscht | RW-Anmeldung fehlgeschlagen — Berechtigungen in Azure prüfen |
| Port-Konflikt beim Start | `.\Start.ps1 -Port 8088` |
| PowerShell-Errors beim Start | `Install-Module Microsoft.Graph.Authentication -Scope CurrentUser -Force` |
| Apply-Button bleibt grau | 0 Vorgänge in der Session oder nur native Targets |
---
Stand: Juli 2026 · Hilfe-Datei: `www/help.md` · Änderungshistorie: `CHANGELOG.md`