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>
This commit is contained in:
2026-09-16 09:18:55 +02:00
co-authored by Claude Opus 4.8
parent af301925e9
commit 7bfcfc18ad
4 changed files with 322 additions and 2 deletions
+56
View File
@@ -619,6 +619,10 @@
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><line x1="12" y1="3" x2="12" y2="9"/><line x1="12" y1="15" x2="12" y2="21"/><circle cx="12" cy="3" r="1"/><circle cx="12" cy="21" r="1"/></svg>
Git-Snapshot
</button>
<button class="btn btn-secondary btn-sm pol-write" id="btnPolAssignGroups" disabled title="Ausgewählten Policies Gruppen zuweisen (Bulk)">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
Gruppen zuweisen (<span id="polAssignSelCount">0</span>)
</button>
<button class="btn btn-secondary btn-sm pol-write" id="btnPolConsolidate" disabled title="Ausgewählte Settings-Catalog-Policies zu einer neuen Policy zusammenführen">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 3v6a3 3 0 0 0 3 3h4a3 3 0 0 1 3 3v6"/><polyline points="3 7 7 3 11 7"/><polyline points="13 17 17 21 21 17"/></svg>
Konsolidieren
@@ -984,6 +988,58 @@
</div>
</div>
<!-- Bulk: mehreren ausgewählten Policies dieselben Gruppen zuweisen -->
<div id="modalPolBulkAssign" class="modal hidden">
<div class="modal-backdrop" data-close></div>
<div class="modal-box modal-lg">
<div class="modal-head">
<h3>Gruppen zuweisen</h3>
<button class="modal-close" data-close aria-label="Schließen">×</button>
</div>
<div class="modal-body">
<div class="form-hint" style="margin-bottom:12px;">
Die gewählten Include-/Exclude-Gruppen werden auf <b><span id="polBulkCount">0</span></b> ausgewählte Policy(s) angewendet.
</div>
<div id="polBulkNames" class="pol-bulk-names"></div>
<div class="pol-assign-pickers" style="margin-top:12px;">
<div class="pol-assign-picker" data-kind="include">
<label class="lbl">Include-Gruppen</label>
<div class="pol-assign-chips" data-scope="bulk" data-kind="include"></div>
<div class="pol-assign-search-wrap">
<input type="text" class="input pol-bulk-search" data-kind="include" placeholder="Gruppe suchen…" autocomplete="off">
<div class="pol-assign-dropdown pol-bulk-dropdown hidden" data-kind="include"></div>
</div>
</div>
<div class="pol-assign-picker" data-kind="exclude">
<label class="lbl">Exclude-Gruppen</label>
<div class="pol-assign-chips" data-scope="bulk" data-kind="exclude"></div>
<div class="pol-assign-search-wrap">
<input type="text" class="input pol-bulk-search" data-kind="exclude" placeholder="Gruppe suchen…" autocomplete="off">
<div class="pol-assign-dropdown pol-bulk-dropdown hidden" data-kind="exclude"></div>
</div>
</div>
</div>
<div class="pol-bulk-builtin" style="margin-top:14px;">
<label class="lbl">Integrierte Ziele (Include)</label>
<label class="pol-bulk-check"><input type="checkbox" id="polBulkAllDevices"> Alle Geräte</label>
<label class="pol-bulk-check"><input type="checkbox" id="polBulkAllUsers"> Alle Benutzer</label>
</div>
<div class="pol-bulk-mode" style="margin-top:16px;">
<label class="lbl">Modus</label>
<label class="pol-bulk-radio"><input type="radio" name="polBulkMode" value="add" checked>
<span><b>Hinzufügen</b> — bestehende Zuweisungen bleiben erhalten, neue Gruppen kommen dazu.</span></label>
<label class="pol-bulk-radio"><input type="radio" name="polBulkMode" value="replace">
<span><b>Ersetzen</b> — alle bisherigen Zuweisungen der Policy werden durch die gewählten Gruppen ersetzt.</span></label>
</div>
</div>
<div class="modal-foot">
<span id="polBulkInfo" class="muted" style="margin-right:auto;"></span>
<button class="btn btn-secondary" data-close>Abbrechen</button>
<button class="btn btn-primary" id="polBulkApply" disabled>Zuweisen</button>
</div>
</div>
</div>
<!-- MODAL: Geräte-Offboarding -->
<div id="modalOffboard" class="modal hidden">
<div class="modal-backdrop" data-close></div>