Policies-Tab: Export/Import (Settings Catalog, Compliance, Config)
Build & Release MSI / build-msi (push) Canceled after 0s

Neuer Tab "Policies" zum Sichern und Wiederherstellen von Intune-Policies.

- Backend src/PolicyIO.ps1: typ-getrieben fuer configurationPolicies
  (Settings Catalog), deviceCompliancePolicies und deviceConfigurations
- Export als JSON-Download (einzeln/Bundle) + Server-Archiv unter %APPDATA%
- Import per Datei-Upload, immer Neuanlage (nie ueberschreiben), robust fuer
  Hashtable (PS7) und PSCustomObject (PS5.1); im Read-Only-Modus ausgeblendet
- Routen in src/Api.ps1; Config-Scope DeviceManagementConfiguration.* auch
  nach Settings-Save sichergestellt
- Frontend: Tab + View, Suche/Typ-Filter/Sortierung, Auswahl, Download/Upload
- Version 0.1.25 (Start.ps1, CHANGELOG, README)
- build-local.ps1: x64-.NET-Runtime fuer wix auf ARM64-Windows + echter
  Desktop-Pfad

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 14:25:29 +02:00
co-authored by Claude Opus 4.8
parent e63ae28cb1
commit ea51bac772
9 changed files with 898 additions and 7 deletions
+52 -1
View File
@@ -92,6 +92,8 @@ Settings → Verbindung
| App Management | Haupt-Ansicht: Apps laden, Gruppen zuweisen / entfernen |
| Group Management | Mitglieder anzeigen, exportieren, Benutzer hinzufuegen, CSV-Import |
| App Report | Installationszaehler pro App, Geraete-Export als CSV |
| Geräte | Geraete suchen, Detail-Panel, Aktionen (Sync, Wipe, …) |
| Policies | Policies exportieren (JSON-Download) und importieren (Neuanlage) |
---
@@ -159,6 +161,47 @@ erika.muster@firma.de
---
## Policies (Export / Import)
Sichert Intune-Policies als JSON und legt sie in einem (ggf. anderen) Tenant
neu an. Unterstuetzte Typen:
| Typ | Graph-Collection |
|-------------------------|-----------------------------|
| Settings Catalog | `configurationPolicies` |
| Compliance Policies | `deviceCompliancePolicies` |
| Konfigurationsprofile | `deviceConfigurations` |
### Export
- Tabelle laedt alle drei Typen; Suche + Typ-Filter grenzen ein
- Policies per Checkbox auswaehlen → **Export**
- **1 Policy** → eine JSON-Datei
- **mehrere** → eine gebündelte JSON-Datei (`intune-policies_<Datum>.json`)
- Zusaetzlich wird jeder Export server-seitig unter
`%APPDATA%\IntuneAppManager-Web\policy-exports` archiviert
### Import *(nur Read/Write)*
- **Import…** → eine oder mehrere JSON-Dateien waehlen (einzeln oder Bundle)
- Import legt die Policies **immer als neue Policy** an — bestehende Policies
werden nie ueberschrieben
- Ergebnis-Toast meldet Erfolg/Fehler pro Policy
> Beim Anlegen entfernt der Import instanzgebundene / schreibgeschuetzte Felder
> (`id`, Zeitstempel, `version`, Zuweisungen, Status). Compliance-Policies
> bekommen bei Bedarf einen Default-`scheduledActionsForRule`-Block, den Graph
> beim Anlegen zwingend verlangt.
### Benoetigt Graph-Berechtigung
`DeviceManagementConfiguration.ReadWrite.All` (Import) bzw.
`DeviceManagementConfiguration.Read.All` (nur Export). Der Scope wird beim Start
automatisch zur Verbindung ergaenzt — in der Azure-App-Registration muss die
Berechtigung aber vorhanden und (Admin-)zugestimmt sein.
---
## Architektur
```
@@ -170,7 +213,8 @@ Intune Manager/
│ ├── Graph.ps1 Microsoft Graph API Helpers
│ ├── Server.ps1 HTTP-Server (HttpListener)
│ ├── Router.ps1 Request-Routing
│ └── Api.ps1 REST-API-Endpoints
│ ├── Api.ps1 REST-API-Endpoints
│ └── PolicyIO.ps1 Policy Export/Import (Compliance, Config, Settings Catalog)
└── www/
├── index.html SPA-Shell
├── styles.css Dark Theme, Read-Only-Regeln
@@ -204,8 +248,15 @@ Intune Manager/
| GET | `/api/membership?targets=&groupId=` | Read | Mitgliedschafts-Status pruefen |
| POST | `/api/membership/bulk` | Read | Mehrere Mitgliedschaften pruefen |
| POST | `/api/assignments/apply` | **Write** | Geplante Zuweisungen ausfuehren |
| GET | `/api/policies/settingscatalog` | Read+Cfg | Settings-Catalog-Policies auflisten |
| GET | `/api/policies/compliance` | Read+Cfg | Compliance-Policies auflisten |
| GET | `/api/policies/configuration` | Read+Cfg | Konfigurationsprofile auflisten |
| POST | `/api/policies/export` | Read+Cfg | Ausgewaehlte Policies als JSON exportieren |
| GET | `/api/policies/exports` | — | Server-Archiv der Exporte auflisten |
| POST | `/api/policies/import` | **Write** | Policies als Neuanlage importieren |
> **Read+MDM** = benoetigt zusaetzlich `DeviceManagementManagedDevices.Read.All`
> **Read+Cfg** = benoetigt `DeviceManagementConfiguration.Read.All` (Export) bzw. `.ReadWrite.All` (Import)
---