Commit Graph
16 Commits
Author SHA1 Message Date
marcoandClaude Opus 4.8 40e26b9f32 Policies: ADMX-Presentation-Matching Hashtable-Bug behoben (PS7/Container)
Where-Object liefert bei einem Treffer ein Einzelobjekt. Ist das eine Hashtable
(PS7 ConvertFrom-Json -AsHashtable, wie im Docker-Container), war $sameType[0]
eine Schluessel-Suche nach Key 0 (=> $null) statt Array-Index -> Presentation
wurde als "nicht zuordenbar" gewertet und die Einstellung uebersprungen. Unter
Windows PowerShell 5.1 (PSCustomObjects) trat der Fehler nicht auf.
Fix: Where-Object-Ergebnis vor dem Indexieren in @() zwingen. Verifiziert per
Simulation gegen die realen Firefox-ADMX-Exportdaten (Default Search Engine,
URL for Home page).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-23 13:29:40 +02:00
marcoandClaude Opus 4.8 849cdd198e Policies: ADMX-Import-Diagnose bei Presentation-Mismatch verbessert
Die "nicht zuordenbar"-Meldung listet jetzt Quell- und Ziel-Presentations
(Typ + Label) auf, damit echte ADMX-Versionsunterschiede sofort sichtbar sind.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-23 13:05:19 +02:00
marcoandClaude Opus 4.8 0e66e268f6 Policies: ADMX-Presentation-Matching robuster (Typ normalisieren + Fallbacks)
- @odata.type-Vergleich normalisiert (fuehrendes '#' egal) -> Text-Presentations
  wurden sonst wegen Formatunterschied nicht zugeordnet.
- Zusaetzlicher Fallback: hat die Ziel-Definition genau eine Presentation, wird
  sie genutzt (deckt Ein-Feld-Settings wie Textboxen ab).
- Definitions-Auflösung: classType zuerst (User/Device nicht verwechseln), dann
  categoryPath bevorzugen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-23 12:56:15 +02:00
marcoandClaude Opus 4.8 c1751bec4d Policies: ADMX-Import überspringt Einstellung sauber bei Presentation-Mismatch
Bei ingesteten ADMX mit abweichender Ziel-Version ließ sich eine Presentation
teils nicht zuordnen; bisher wurde die Einstellung dennoch (unvollständig)
gepostet -> 400 BadRequest. Jetzt wird die ganze Einstellung mit klarer Meldung
übersprungen, statt einen kaputten Body zu senden.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-23 12:37:55 +02:00
marcoandClaude Opus 4.8 300c72eb4f Policies: Import ingesteter (custom) ADMX-Vorlagen tenantübergreifend
Custom-ADMX-Definitionen (policyType 'admxIngested') haben tenant-spezifische
IDs -> Binding per Export-Id scheiterte im Ziel-Tenant mit 404. Import löst
solche Definitionen jetzt im Ziel über displayName/classType/categoryPath neu
auf und bindet an die dortige Id; Presentations werden per label/@odata.type
(Fallback: Reihenfolge je Typ) zugeordnet. Eingebaute Vorlagen (admxBacked)
unverändert per stabiler Id. categoryPath wird dafür mitexportiert.

Voraussetzung: dieselbe ADMX ist im Ziel-Tenant importiert; fehlt sie, wird die
betroffene Einstellung mit klarer Meldung übersprungen (Rest wird angelegt).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-23 09:21:53 +02:00
marcoandClaude Opus 4.8 ead650d326 Policies: Admin-Vorlagen-Export ohne verschachtelten $expand (MaxExpansionDepth=1)
Graph lehnt definitionValues?$expand=...,presentationValues($expand=presentation)
mit 400 ab ("$expand path too deep, max 1"). Jetzt definitionValues nur mit
'definition' expandieren (Tiefe 1) und presentationValues je definitionValue
separat mit 'presentation' nachladen (jeweils Tiefe 1). Liefert dieselben Daten
für den Re-Import (definition.id, presentation.id, value/values).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-23 09:05:34 +02:00
marcoandClaude Opus 4.8 b58aa1fde3 Policies: Admin-Vorlagen-Export gehärtet (resiliente Liste + sichtbare Fehler)
- Get-GraphPolicyList: $expand=assignments pro Typ absichern. groupPolicyConfigurations
  (Administrative Vorlagen) lehnt den Expand teils mit 400 ab -> dann scheiterte das
  Laden und der Export ließ die Policies still weg. Jetzt Fallback auf Laden ohne
  Zuweisungen, damit der Typ erscheint und exportierbar bleibt.
- Export-PoliciesEndpoint: Detail-Fehler nicht mehr verschlucken, sondern pro Policy
  in 'errors' zurückgeben (+ Log).
- Frontend: Export-Fehler werden im Toast gemeldet (kein stiller Teil-Export mehr).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-23 08:58:55 +02:00
marcoandClaude Opus 4.8 e652891c41 Cross-Platform: Spike für Betrieb unter PowerShell 7 auf macOS/Linux
Windows-Verhalten bleibt identisch (Pfade/Temp verifiziert). Portable Anpassungen:
- Get-AppDataDir/Test-IsWindows (Models.ps1): App-Daten unter macOS in
  ~/Library/Application Support, Linux in $XDG_CONFIG_HOME/~/.config;
  auf Windows unveraendert %APPDATA%. Settings- und Policy-Export-Pfad nutzen ihn.
- ReportDir ueber [IO.Path]::GetTempPath() statt $env:TEMP (auf macOS/Linux leer).
- Start.ps1: Browser plattformneutral oeffnen (open/xdg-open/Start-Process);
  WMI-Stale-Instanz-Erkennung nur noch auf Windows.
- Datei-/Ordner-Dialog: macOS-nativer osascript-Chooser statt System.Windows.Forms;
  auf nicht unterstuetzten Plattformen klare Fehlermeldung.

Auth (Device-Code-Flow) und HttpListener sind bereits plattformneutral. Test auf
echtem macOS steht aus; Packaging (.app/.dmg) folgt separat.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-16 15:46:56 +02:00
marcoandClaude Opus 4.8 9fb42b4d7e Policies: Zuweisungen sichtbar, Ergebnis-Report, Post-Import-Parität (#1 #4 #5)
- #1 Spalte "Zuweisungen" in der Policy-Liste (Anzahl); Klick öffnet eine
  Detailansicht mit den konkreten Include-/Exclude-Gruppen und Alle Geräte/
  Benutzer. Get-GraphPolicyList lädt jetzt $expand=assignments und löst
  Gruppennamen in einem Bulk-Lookup (Resolve-GroupNamesBulk) auf.
- #4 Bulk-Zuweisung zeigt statt nur eines Toasts einen Ergebnis-Report pro
  Policy (zugewiesen / übersprungen / Fehler) und lädt die Liste neu.
- #5 Post-Import-Zuweisung erhält Alle Geräte/Alle Benutzer (Parität zur
  Bulk-Zuweisung) und nutzt dieselbe Ergebnisansicht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-16 12:23:10 +02:00
marcoandClaude Opus 4.8 7bfcfc18ad Policies: Bulk-Zuweisung von Gruppen inkl. Alle Geräte/Alle Benutzer
- Neuer Toolbar-Button "Gruppen zuweisen" im Policy-Tab: mehreren
  ausgewählten Policies (typübergreifend) in einem Schritt dieselben
  Include-/Exclude-Gruppen zuweisen.
- Zwei Modi: "Hinzufügen" (bestehende Zuweisungen werden gelesen und
  gemergt, da Graph /assign Full-Replace ist) und "Ersetzen".
- Integrierte Include-Ziele "Alle Geräte" (allDevicesAssignmentTarget)
  und "Alle Benutzer" (allLicensedUsersAssignmentTarget), dedupliziert
  und mit Exclude-Gruppen kombinierbar.
- Invoke-PolicyAssignEndpoint um mode/allDevices/allUsers erweitert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-16 09:18:55 +02:00
marcoandClaude Opus 4.8 0ae20211c7 Settings-Catalog-Import: choiceSettingCollectionValue als Array erzwingen
choiceSettingCollectionValue fehlte in der Array-Key-Liste von
Repair-SettingsCatalogArrays. Beim PS-5.1-JSON-Roundtrip wurde ein
Ein-Element-choiceSettingCollectionValue zum Einzelobjekt entpackt, worauf
Graph den Import mit 400 "Property choiceSettingCollectionValue in payload has
a value that does not match schema" ablehnte (z. B. Default Defender Antivirus
Policy). Jetzt analog zu group-/simpleSettingCollectionValue behandelt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-15 17:49:30 +02:00
marcoandClaude Opus 4.8 bd73a9c3b2 v0.1.31 — Policy-Konsolidierung, Geraete-Export nach Gruppe, Gruppen-in-Gruppen
Build & Release MSI / build-msi (push) Canceled after 0s
- Policies zusammenfuehren (Settings Catalog -> eine neue Policy, Konfliktaufloesung)
- Geraete-Tab: Gruppen-Filter (Live-Suche) + CSV-Export der angezeigten Liste
- Group Management: bestehende Gruppen als Mitglied hinzufuegen (verschachtelt)
- Fix: Geraete "Invalid Date" (ISO-Normalisierung) + Datums-/Spalten-Sortierung
- Doku (README/CHANGELOG) + Version-Bump 0.1.31

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 09:01:02 +02:00
marcoandClaude Opus 4.8 446c53f409 v0.1.30 — Policy-Bulk-Import gehaertet, macOS-Apps, Gruppen-Suche & Direkt-Zuweisung
Build & Release MSI / build-msi (push) Canceled after 0s
- Bulk-Import von Policies (Batches + Fortschritt, Fehler-Isolierung)
- Export/Import-Treue via Raw-JSON (-OutputType Json), null-Collections-Strip,
  Settings-Catalog-Reparatur + Korruptions-Erkennung, Git-Resolver
- macOS-Apps in Liste/Suche + Plattform-Filter
- "Gruppe"-Tab durchsucht alle Gruppen (Live-Suche) statt nur Praefix-Gruppen
- Bestehende Gruppe(n) direkt an Apps zuweisen inkl. Mehrfachauswahl
- Fix: Add-GraphAppAssignment merged bestehende Zuweisungen (/assign ersetzt sonst
  die komplette Liste) -> kein Ueberschreiben mehr, ein Request fuer alle Ziele

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-03 09:03:22 +02:00
marcoandClaude Opus 4.8 830dddd15a v0.1.28 — Umbenennen beim Import, UI-Fixes, Geraete-Export repariert
Build & Release MSI / build-msi (push) Canceled after 0s
Neu:
- Umbenennen beim Import: Policy-Name vor dem Anlegen anpassbar
  (Dialog "Policies importieren"), richtiges Namensfeld je Typ

Behoben:
- Geraete-Export im App Report: entfernter sync-Endpoint
  getDeviceInstallStatusReport (400) -> async Export-Job
  DeviceInstallStatusByApp; ZIP/CSV-Logik in Get-IntuneReportRows
- Darkmode-Kontrast im Zuweisungs-Dialog (Theme-Variablen statt fester Farben)
- Dialog-Breite: lange Policy-Namen brechen um statt H-Scroll

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-24 09:23:59 +02:00
marcoandClaude Opus 4.8 4efc71376b Policy-Import haerten, Admin-Vorlagen, Zuweisung nach Import, Git-Snapshot
Neu:
- Administrative Vorlagen (ADMX / groupPolicyConfigurations) als vierter
  Policy-Typ fuer Export/Import (GET /api/policies/administrativetemplate)
- Zuweisung direkt nach Import: pro Policy Include-/Exclude-Gruppen
  (POST /api/policies/assign, typ-spezifische /assign-Action)
- Git-Snapshot: versioniertes Policy-Backup in lokalen Git-Ordner
  (Settings-Sektion policyBackup)
- Import akzeptiert Git-Snapshot-Dateien (policyType neben exportType)

Behoben:
- Settings-Catalog-Import schema-konform: Collection-Properties immer als
  Array (repariert PS-5.1-Roundtrip), null -> [], Wrapper-@odata.type,
  read-only id entfernt
- Import-Phantom-Fehler (@($null)-Geisterdurchlauf im Archiv-Pfad)
- Frontend-Cache-Reset beim Tenant-Wechsel (resetClientState)
- WAM-Anmeldefenster zuverlaessig im Vordergrund (AttachThreadInput)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 11:25:19 +02:00
marcoandClaude Opus 4.8 ea51bac772 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>
2026-08-19 14:25:29 +02:00