> For the complete documentation index, see [llms.txt](https://docs.realmjoin.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.realmjoin.com/de/automatisierung/runbooks/runbook-references/org/general/sync-sharedchannel-owners_scheduled.md).

# Geplante Synchronisierung von Besitzern freigegebener Kanäle

### Beschreibung

Teams Shared Channels erben nicht die Besitzerrolle ihres übergeordneten Teams. Dieses geplante Runbook schließt diese Lücke: Für jedes in einer Zuordnung genannte Team stellt es sicher, dass die Mitglieder einer zugeordneten Security Group Besitzer des Teams und jedes vom Team gehosteten Shared Channel sind. Die Zuordnung von Teamnamen zu Owner-Gruppen wird zentral als RealmJoin-Org-Einstellung gepflegt. Das Runbook ist nur zum Hinzufügen gedacht – vorhandene Besitzer und Mitglieder werden nie entfernt – sodass neu erstellte Shared Channels beim nächsten Lauf einfach übernommen werden. Optional kann es einen Bericht per E-Mail senden und/oder die CSV-Ergebnisse als Downloadlink hochladen. Siehe die begleitende Dokumentation für die Zuordnungsregeln und die Konfiguration.

### So funktioniert es

Bei jedem Lauf führt das Runbook Folgendes aus:

1. Liest die Zuordnung von Teamnamen zu Owner-Gruppen aus der Org-Einstellung `SharedChannelOwners.Mapping`.
2. Sucht für jeden Eintrag das Team anhand seines **exakten Anzeigenamens**.
3. Erweitert die Owner-Gruppe dieses Eintrags auf ihre transitiven **Benutzer** Mitglieder (Gäste werden übersprungen – sie können keinem Shared Channel angehören).
4. Stellt sicher, dass diese Benutzer Besitzer des Teams und jedes **gehosteten** Shared Channel des Teams sind.

Das Runbook ist **nur zum Hinzufügen**: Es stuft vorhandene Besitzer oder Mitglieder niemals herab und entfernt sie nie. Neu erstellte Shared Channels werden daher beim nächsten geplanten Lauf automatisch übernommen, ohne etwas bereits Vorhandenes zu beeinträchtigen.

#### Zuordnungs-Konfiguration

Die Zuordnung befindet sich zentral in den RealmJoin-Org-Einstellungen (Runbook Customization → `Einstellungen` → `SharedChannelOwners.Mapping`) sodass sie einmal gepflegt und von jedem Zeitplan gemeinsam genutzt wird. Es ist eine Liste von `{ TeamName, OwnerGroupId }` Objekten, wobei `TeamName` der **exakte Anzeigename des Teams** (siehe den *Hinweise* Abschnitt für ein sofort verwendbares Beispiel). Der verborgene `TeamOwnerGroupMapping` Parameter wird aus dieser Einstellung injiziert; das Runbook akzeptiert ihn entweder als strukturiertes Array (empfohlene Untereinstellungsform) oder als JSON-String und normalisiert beides.

#### Team-Abgleich

Jeder Zuordnungseintrag zielt auf ein explizit benanntes Team:

* Ein Team wird abgeglichen anhand seines **exakten Anzeigenamens** (ohne Beachtung der Groß-/Kleinschreibung, konsistent mit Microsoft Graph; führende und nachfolgende Leerzeichen im konfigurierten Namen werden ignoriert). Es wird nur dieses Team verarbeitet – es gibt kein Präfix- oder Platzhalterverhalten, daher bewirkt ein Eintrag mit dem Namen `EXT Service A` niemals `EXT Service A Backup` oder Ähnliches.
* Anzeigenamen sind in Entra ID nicht zwangsläufig eindeutig. Wenn mehrere Teams den konfigurierten Namen teilen, wird die Owner-Gruppe auf **alle** von ihnen angewendet. Wenn kein Team übereinstimmt, wird der Eintrag als *nicht gefunden* gemeldet und übersprungen.

#### Team-Auswahl

Für jedes konfigurierte `TeamName` führt das Runbook eine Graph- `displayName eq '...'` Abfrage aus und behält nur Microsoft 365-Gruppen bei, die als **Team**.

#### Was geändert wird

* **Team (optional, `IncludeTeamOwners`, standardmäßig aktiviert):** werden die Benutzer der Owner-Gruppe als Besitzer und Mitglieder der übergeordneten Microsoft 365-Gruppe hinzugefügt. Die Teammitgliedschaft ist außerdem die technische Voraussetzung dafür, Besitzer eines Shared Channel zu werden, sodass dieser Schritt den Kanalschritt ermöglicht.
* **Shared Channels:** für jeden gehosteten Shared Channel (`membershipType eq 'shared'`), **Besitzer** - direkt hinzugefügt, falls er fehlt, oder hochgestuft, wenn er bereits Mitglied ist. Wird ein direktes Hinzufügen als Besitzer abgelehnt (z. B. aufgrund von Verzögerungen bei der Replikation der Mitgliedschaft), fügt das Runbook den Benutzer zunächst als Mitglied hinzu und stuft ihn dann hoch.

#### Probelauf

Setzen Sie **`WhatIfMode`** um zu protokollieren, was sich ändern würde, ohne etwas zu schreiben. In diesem Modus gibt das Runbook im Voraus die Teams aus, die es verarbeiten würde (mit ihrer Owner-Gruppe), sowie alle konfigurierten Teamnamen, die nicht gefunden wurden.

#### Berichterstattung (optional, beide standardmäßig deaktiviert)

* **`SendEmailReport`** sendet eine E-Mail im RealmJoin-Branding (über `Send-RjReportEmail`) mit Laufstatistiken und zwei CSV-Anhängen: einer Zusammenfassung pro Team und einer Detailliste pro Änderung. Der Absender wird aus der `RJReport.EmailSender` Einstellung übernommen.
* **`CreateDownloadLink`** lädt dieselben CSVs in ein Storage Account hoch und gibt zeitlich begrenzte SAS-Downloadlinks zurück (die ebenfalls in die E-Mail eingebettet werden, wenn beide Optionen aktiviert sind). Der Ziel-Storage Account wird aus der `RJReport.StorageAccount.*` Einstellungen übernommen.

Der Storage-Upload authentifiziert sich mit der verwalteten Identität des Automation-Kontos; diese Identität benötigt die **Storage Blob Data Contributor** RBAC-Rolle auf dem Ziel-Storage Account (dies ist eine Azure-RBAC-Zuweisung, keine Microsoft Graph-Anwendungsberechtigung).

#### Zeitplanung

Konzipiert für den unbeaufsichtigten Betrieb nach Zeitplan. Da die Konfiguration in den Org-Einstellungen zentralisiert ist und das Runbook nur zum Hinzufügen gedacht und idempotent ist, hält ein einzelner wiederkehrender Zeitplan alle zugeordneten Teams und ihre Shared Channels synchron, während Personen und Kanäle kommen und gehen.

### Ort

Organisation → Allgemein → Sync Sharedchannel Owners (Geplant)

**Vollständiger Runbook-Name**

rjgit-org\_general\_sync-sharedchannel-owners\_scheduled

### Berechtigungen

#### Anwendungsberechtigungen

* **Typ**: Microsoft Graph
  * Group.ReadWrite.All
  * GroupMember.ReadWrite.All
  * Channel.ReadBasic.All
  * ChannelMember.ReadWrite.All
  * Mail.Send

### Parameter

#### TeamOwnerGroupMapping

Zuordnung eines exakten Team-Anzeigenamens zu einer Owner Security Group-Objekt-ID, z. B. \[{ "TeamName": "EXT Service A", "OwnerGroupId": "00000000-0000-0000-0000-000000000000" }]. Verborgener Parameter, gebunden an die Org-Einstellung "SharedChannelOwners.Mapping". Das RealmJoin-Portal injiziert diesen Wert; das Runbook akzeptiert ihn entweder als deserialisiertes Objekt/Array (strukturierte Untereinstellungen) oder als JSON-String und normalisiert beides.

| Eigenschaft  | Wert   |
| ------------ | ------ |
| Erforderlich | false  |
| Standardwert | \[]    |
| Typ          | Objekt |

#### IncludeTeamOwners

Wenn aktiviert (Standard), werden die Mitglieder der Owner-Gruppe auch als Besitzer und Mitglieder des übergeordneten Teams selbst sichergestellt (M365-Gruppenbesitzer/-mitglieder). Die Teammitgliedschaft ist auch die Voraussetzung für den Kanalbesitz.

| Eigenschaft  | Wert     |
| ------------ | -------- |
| Erforderlich | false    |
| Standardwert | Wahr     |
| Typ          | Boolesch |

#### WhatIfMode

Wenn aktiviert, protokolliert das Runbook nur die Änderungen, die es vornehmen würde, ohne etwas zu schreiben.

| Eigenschaft  | Wert     |
| ------------ | -------- |
| Erforderlich | false    |
| Standardwert | False    |
| Typ          | Boolesch |

#### SendEmailReport

Wenn aktiviert, wird nach dem Lauf ein E-Mail-Bericht im RealmJoin-Branding über Send-RjReportEmail gesendet. Der Inhalt umfasst Laufstatistiken und zwei CSV-Anhänge (Zusammenfassung pro Team und Detail pro Änderung).

| Eigenschaft  | Wert     |
| ------------ | -------- |
| Erforderlich | false    |
| Standardwert | False    |
| Typ          | Boolesch |

#### E-Mail an

E-Mail-Adresse(n) der Empfänger für den Bericht (durch Kommas getrennt). Wird nur verwendet, wenn SendEmailReport aktiviert ist.

| Eigenschaft  | Wert         |
| ------------ | ------------ |
| Erforderlich | false        |
| Standardwert |              |
| Typ          | Zeichenfolge |

#### E-Mail von

Absenderpostfach für den Bericht. An die Org-Einstellung "RJReport.EmailSender" gebunden.

| Eigenschaft  | Wert         |
| ------------ | ------------ |
| Erforderlich | false        |
| Standardwert |              |
| Typ          | Zeichenfolge |

#### CreateDownloadLink

Wenn aktiviert, werden die CSV-Berichte in einen Storage Account hochgeladen und ein zeitlich begrenzter Downloadlink zurückgegeben (und in den E-Mail-Bericht aufgenommen, wenn dieser ebenfalls aktiviert ist). Standardmäßig deaktiviert.

| Eigenschaft  | Wert     |
| ------------ | -------- |
| Erforderlich | false    |
| Standardwert | False    |
| Typ          | Boolesch |

#### ContainerName

Storage-Container, der für den Upload verwendet wird. Pro Runbook konfiguriert (keine globale RJReport-Einstellung).

| Eigenschaft  | Wert                  |
| ------------ | --------------------- |
| Erforderlich | false                 |
| Standardwert | shared-channel-owners |
| Typ          | Zeichenfolge          |

#### ResourceGroupName

Ressourcengruppe, die den Storage Account enthält. An "RJReport.StorageAccount.ResourceGroup" gebunden.

| Eigenschaft  | Wert         |
| ------------ | ------------ |
| Erforderlich | false        |
| Standardwert |              |
| Typ          | Zeichenfolge |

#### StorageAccountName

Storage Account, der für den Upload verwendet wird. An "RJReport.StorageAccount.StorageAccountName" gebunden.

| Eigenschaft  | Wert         |
| ------------ | ------------ |
| Erforderlich | false        |
| Standardwert |              |
| Typ          | Zeichenfolge |

#### LinkExpiryDays

Tage, bis der generierte Downloadlink abläuft. An "RJReport.StorageAccount.LinkExpiryDays" gebunden.

| Eigenschaft  | Wert  |
| ------------ | ----- |
| Erforderlich | false |
| Standardwert | 6     |
| Typ          | Int32 |

[Zur Übersicht der Runbook-Referenz zurück](/de/automatisierung/runbooks/runbook-references.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.realmjoin.com/de/automatisierung/runbooks/runbook-references/org/general/sync-sharedchannel-owners_scheduled.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
