> 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-shared-channel-owners_scheduled.md).

# Geplante Synchronisierung von Shared Channel-Besitzern

Sicherstellen, dass Mitglieder einer Security Group Besitzer zugeordneter Teams und ihrer Shared Channel sind.

{% hint style="info" %}
Dies ist ein geplantes Runbook. Es ist so konzipiert, dass es nach einem wiederkehrenden Zeitplan ausgeführt wird, statt für ein einzelnes Objekt ausgelöst zu werden. Siehe [Zeitplanung](/de/automatisierung/runbooks/scheduling.md) für Details zur Konfiguration von Runbook-Zeitplänen.
{% endhint %}

### Beschreibung

Teams Shared Channels erben nicht die Besitzverhältnisse von ihrem übergeordneten Team. 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 freigegebenen Kanals sind, den das Team hostet. Die Zuordnung von Teamname zu Besitzergruppe wird zentral als RealmJoin-Organisations-Einstellung gepflegt. Das Runbook arbeitet nur additiv – vorhandene Besitzer und Mitglieder werden nie entfernt – sodass neu erstellte freigegebene Kanäle beim nächsten Lauf einfach übernommen werden. Optional kann es einen Bericht per E-Mail senden und/oder die Berichtdateien als Download-Link hochladen. Der Parameter ReportFileFormat steuert, welche Berichtsdateiformate erzeugt und ausgeliefert werden (nur CSV, CSV & XLSX oder nur XLSX). Wenn die CSV-Anhänge das E-Mail-Größenlimit überschreiten und "CSV & XLSX" ausgewählt ist, fällt die E-Mail auf allein die Excel-Arbeitsmappe zurück. Siehe die begleitende Dokumentation zu den Zuordnungsregeln und zur Konfiguration.

### So funktioniert es

Bei jedem Lauf führt das Runbook Folgendes aus:

1. Liest die Zuordnung von Teamname zu Besitzergruppe aus der Organisations-Einstellung `SharedChannelOwners.Mapping`.
2. Sucht für jeden Eintrag das Team anhand seines **genauen Anzeigenamens**.
3. Erweitert die Besitzergruppe dieses Eintrags auf ihre transitive **Benutzer** mitglieder (Gäste werden übersprungen – sie können keinem freigegebenen Kanal angehören).
4. Stellt sicher, dass diese Benutzer Besitzer des Teams und jedes **gehosteten** freigegebenen Kanals des Teams sind.

Das Runbook ist **nur additiv**: Es stuft vorhandene Besitzer oder Mitglieder nie herab und entfernt sie nie. Neu erstellte freigegebene Kanäle werden daher beim nächsten geplanten Lauf automatisch übernommen, ohne bereits Vorhandenes zu beeinträchtigen.

#### Zuordnungskonfiguration

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

#### Teamzuordnung

Jeder Zuordnungseintrag zielt auf ein explizit benanntes Team ab:

* Ein Team wird anhand seines **genauen Anzeigenamens** (Groß-/Kleinschreibung wird ignoriert, konsistent mit Microsoft Graph; führende und nachfolgende Leerzeichen im konfigurierten Namen werden ignoriert). Nur dieses Team wird verarbeitet – es gibt kein Präfix- oder Platzhalterverhalten, sodass der Name eines Eintrags `EXT Service A` nie `EXT Service A Backup` oder Ähnliches beeinflusst.
* Anzeigenamen sind in Entra ID nicht eindeutig garantiert. Wenn mehrere Teams denselben konfigurierten Namen haben, wird die Besitzergruppe auf **alle** von ihnen angewendet. Wenn kein Team übereinstimmt, wird der Eintrag als *nicht gefunden* gemeldet und übersprungen.

#### Teamauswahl

Für jeden konfigurierten `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):** die Benutzer der Besitzergruppe werden als Besitzer und Mitglieder der übergeordneten M365-Gruppe hinzugefügt. Die Team-Mitgliedschaft ist auch die technische Voraussetzung, um Besitzer eines freigegebenen Kanals zu werden, daher aktiviert dieser Schritt den Kanal-Schritt.
* **Freigegebene Kanäle:** für jeden gehosteten freigegebenen Kanal (`membershipType eq 'shared'`), wird für jeden Benutzer der Besitzergruppe sichergestellt, dass er Kanal- **Besitzer** - direkt hinzugefügt, wenn er fehlt, oder hochgestuft, wenn er bereits Mitglied ist. Wenn das direkte Hinzufügen als Besitzer abgelehnt wird (z. B. wegen Verzögerung bei der Mitgliedschaftsreplikation), weicht das Runbook darauf aus, den Benutzer zuerst als Mitglied hinzuzufügen und ihn dann hochzustufen.

#### Trockenlauf

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 Besitzergruppe), sowie alle konfigurierten Teamnamen, die nicht gefunden wurden.

#### Berichtswesen (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 Detail-Liste 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-Download-Links zurück (die auch in der E-Mail eingebettet werden, wenn beide Optionen aktiviert sind). Das Ziel-Storage Account wird aus den `RJReport.StorageAccount.*` Einstellungen übernommen.

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

#### Zeitplanung

Entwickelt, um unbeaufsichtigt nach Zeitplan zu laufen. Da die Konfiguration zentral in den Organisations-Einstellungen liegt und das Runbook nur additiv und idempotent ist, hält ein einzelner wiederkehrender Zeitplan alle zugeordneten Teams und ihre freigegebenen Kanäle synchron, während Personen und Kanäle kommen und gehen.

### E-Mail-Branding

Die Bericht-E-Mail berücksichtigt optional die `RJReport.Branding.*` Mandanteneinstellungen:

* **Kopf- und Fußzeilenbild** – öffentliche HTTPS-URLs, PNG/JPEG/GIF, max. 200 KB jeweils
* **Fußzeilenlink** – Ziel des Fußzeilenbilds
* **Akzent- und Textfarbe** – 6-stellige Hex-Werte, z. B. `#0052cc`

Wenn diese Einstellungen nicht konfiguriert sind, werden die standardmäßigen RealmJoin-Grafiken und -Farben verwendet. Ein Bild, das nicht heruntergeladen oder validiert werden kann, oder ein ungültiger Farbwert verhindert niemals die Bericht-E-Mail – stattdessen wird der entsprechende Standardwert verwendet.

Einrichtungsanweisungen und Bildanforderungen: [E-Mail-Branding](https://docs.realmjoin.com/automation/runbooks/runbook-report-settings#email-branding-optional).

### Speicherort

Organisation → Allgemein → Sync Shared Channel Owners (geplant)

**Vollständiger Runbook-Name**

rjgit-org\_general\_sync-shared-channel-owners\_scheduled

### Details

| Eigenschaft          | Wert                                                                                                              |
| -------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Version              | 1.3.0                                                                                                             |
| Erforderliche Module | <p>RealmJoin.RunbookHelper (>= 0.8.9)<br>Microsoft.Graph.Authentication (>= 2.39.0)<br>Az.Accounts (>= 5.5.2)</p> |
| Planbar              | ja                                                                                                                |

### Hinweise

Konfigurieren Sie die Zuordnung einmal zentral (Runbook Customization -> Settings) als strukturierte Untereinstellung unter "SharedChannelOwners.Mapping". Jeder Eintrag benennt ein Team anhand seines genauen Anzeigenamens. Der verborgene Parameter TeamOwnerGroupMapping wird zur Laufzeit daraus injiziert. { "Settings": { "SharedChannelOwners": { "Mapping": \[ { "TeamName": "EXT Service A", "OwnerGroupId": "11111111-1111-1111-1111-111111111111" }, { "TeamName": "EXT Service B", "OwnerGroupId": "22222222-2222-2222-2222-222222222222" } ] } } }

### Berechtigungen

#### Anwendungsberechtigungen

* **Typ**: Microsoft Graph
  * Group.ReadWrite.All
    * *Listet Teams auf, liest Gruppenbesitzer und fügt fehlende Team-Besitzer über /groups/{id}/owners/$ref hinzu*
  * GroupMember.ReadWrite.All
    * *Liest die transitiven Mitglieder der Besitzergruppe und fügt Benutzer zuerst als Teammitglieder hinzu*
  * Channel.ReadBasic.All
    * *Listet /teams/{id}/channels auf, um die zu verarbeitenden freigegebenen Kanäle zu finden*
  * ChannelMember.ReadWrite.All
    * *Liest Kanalmitglieder und fügt Benutzer hinzu oder stuft sie zum Besitzer eines freigegebenen Kanals hoch*
  * Mail.Send *(optional — Funktion: E-Mail-Bericht)*
    * *Sendet die Synchronisierungsbericht-E-Mail über Send-RjReportEmail, wenn EmailTo konfiguriert ist*
  * User.Read.All
    * *Liest Benutzereigenschaften von Mitgliedern (UPN, userType) über transitiveMembers, um Gäste herauszufiltern*
  * Organization.Read.All *(optional — Funktion: E-Mail-Bericht)*
    * *Liest den Anzeigenamen des Tenant für die Bericht-E-Mail*

### Parameter

#### TeamOwnerGroupMapping

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

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

#### IncludeTeamOwners

Wenn aktiviert (Standard), wird auch sichergestellt, dass die Mitglieder der Besitzergruppe Besitzer und Mitglieder des übergeordneten Teams selbst sind (Besitzer/Mitglieder der M365-Gruppe). Die Team-Mitgliedschaft ist außerdem die Voraussetzung für die Kanal-Besitzerschaft.

| Eigenschaft  | Wert     |
| ------------ | -------- |
| Erforderlich | falsch   |
| 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 | falsch   |
| Standardwert | Falsch   |
| Typ          | Boolesch |

#### SendEmailReport

Wenn aktiviert, wird nach dem Lauf ein E-Mail-Bericht im RealmJoin-Branding über Send-RjReportEmail gesendet. Der Text enthält Laufstatistiken; die Berichtsdateien (Zusammenfassung pro Team und Detail pro Änderung) werden in den ausgewählten Berichtsdateiformaten angehängt.

| Eigenschaft  | Wert     |
| ------------ | -------- |
| Erforderlich | falsch   |
| Standardwert | Falsch   |
| Typ          | Boolesch |

#### EmailTo

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

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

#### EmailFrom

Absenderpostfach für den Bericht. Gebunden an die org Setting "RJReport.EmailSender".

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

#### BrandingHeaderImageUrl

Optionale öffentliche HTTPS-URL eines benutzerdefinierten Kopfzeilenbilds (PNG/JPEG/GIF, max. 200 KB) für die Bericht-E-Mail. Stammt aus der Mandanteneinstellung RJReport.Branding.HeaderImageUrl. Wenn leer, wird die standardmäßige RealmJoin-Kopfzeilengrafik verwendet.

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

#### BrandingFooterImageUrl

Optionale öffentliche HTTPS-URL eines benutzerdefinierten Fußzeilenbilds (PNG/JPEG/GIF, max. 200 KB) für die Bericht-E-Mail. Stammt aus der Mandanteneinstellung RJReport.Branding.FooterImageUrl. Wenn leer, wird die standardmäßige RealmJoin-Fußzeilengrafik verwendet.

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

#### BrandingFooterLink

Optionale URL, auf die das Fußzeilenbild verweist. Stammt aus der Mandanteneinstellung RJReport.Branding.FooterLink. Wenn leer, wird der Standardlink (<https://www.realmjoin.com>) verwendet.

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

#### BrandingAccentColor

Optionale Überschreibung der Akzentfarbe (6-stelliger Hex-Wert, z. B. '#0052cc') für die Bericht-E-Mail-Vorlage. Stammt aus der Mandanteneinstellung RJReport.Branding.AccentColor. Wenn leer oder ungültig, wird die standardmäßige RealmJoin-Akzentfarbe verwendet.

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

#### BrandingTextColor

Optionale Überschreibung der Textfarbe (6-stelliger Hex-Wert) für die Bericht-E-Mail-Vorlage. Stammt aus der Mandanteneinstellung RJReport.Branding.TextColor. Wenn leer oder ungültig, wird die standardmäßige RealmJoin-Textfarbe verwendet.

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

#### ReportFileFormat

Steuert, welche Berichtdateiformate erzeugt und bereitgestellt werden: "nur CSV", "CSV & XLSX" (Standard) oder "nur XLSX".

| Eigenschaft  | Wert         |
| ------------ | ------------ |
| Erforderlich | falsch       |
| Standardwert | CSV & XLSX   |
| Typ          | Zeichenfolge |

#### CreateDownloadLink

Wenn aktiviert, werden die Berichtsdatei(en) in ein Storage Account hochgeladen und zeitlich begrenzte Download-Links zurückgegeben (und in den E-Mail-Bericht aufgenommen, wenn auch dieser aktiviert ist). Standardmäßig deaktiviert.

| Eigenschaft  | Wert     |
| ------------ | -------- |
| Erforderlich | falsch   |
| Standardwert | Falsch   |
| Typ          | Boolesch |

#### ContainerName

Für den Upload verwendeter Storage-Container. Pro Runbook konfiguriert (keine globale RJReport-Einstellung).

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

#### ResourceGroupName

Ressourcengruppe, die das Storage Account enthält. Gebunden an "RJReport.StorageAccount.ResourceGroup".

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

#### StorageAccountName

Für den Upload verwendetes Storage Account. Gebunden an "RJReport.StorageAccount.StorageAccountName".

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

#### LinkExpiryDays

Tage, bis der generierte Download-Link abläuft. Gebunden an "RJReport.StorageAccount.LinkExpiryDays".

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

[Zurück zur Übersicht der Runbook-Referenz](/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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
