> 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).

# Besitzer von Shared Channel synchronisieren geplant

{% hint style="info" %}
Dies ist ein geplanter Runbook-Durchlauf. Er ist dafür ausgelegt, nach einem wiederkehrenden Zeitplan ausgeführt zu werden, statt für ein einzelnes Objekt ausgelöst zu werden. Siehe [Planung](/de/automatisierung/runbooks/scheduling.md) für Details zur Konfiguration von Runbook-Zeitplänen.
{% endhint %}

### Beschreibung

Teams Shared Channels übernehmen keine Besitzrechte von ihrem übergeordneten Team. Dieses geplante Runbook schließt diese Lücke: Für jedes in einer Zuordnung benannte Team stellt es sicher, dass die Mitglieder einer zugeordneten Sicherheitsgruppe Besitzer des Teams und jedes vom Team gehosteten Shared Channel sind. Die Zuordnung von Teamname zu Eigentümergruppe wird zentral als RealmJoin-Org-Einstellung gepflegt. Das Runbook ist nur zum Hinzufügen – bestehende Besitzer und Mitglieder werden niemals 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 Berichtdateien als Download-Link hochladen. Der Parameter ReportFileFormat steuert, welche Berichtdateiformate generiert und bereitgestellt 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, weicht die E-Mail nur auf die Excel-Arbeitsmappe aus. Weitere Informationen zu den Zuordnungsregeln und zur Konfiguration finden Sie in der beiliegenden Dokumentation.

### So funktioniert es

Bei jedem Lauf führt das Runbook Folgendes aus:

1. Liest die Zuordnung von Teamnamen zu Eigentümergruppen aus der Org-Einstellung `SharedChannelOwners.Mapping`.
2. Sucht für jeden Eintrag das Team anhand seines **exakten Anzeigenamens**.
3. Erweitert die Eigentümergruppe 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 bestehende Besitzer oder Mitglieder niemals herab und entfernt sie nie. Neu erstellte Shared Channels werden daher beim nächsten geplanten Lauf automatisch übernommen, ohne bereits Vorhandenes zu beeinträchtigen.

#### Zuordnungskonfiguration

Die Zuordnung liegt zentral in den RealmJoin-Org-Einstellungen (Runbook Customization → `Einstellungen` → `SharedChannelOwners.Mapping`) und wird daher einmal gepflegt und von jedem Zeitplan gemeinsam genutzt. 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 versteckte `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-Zuordnung

Jeder Zuordnungseintrag bezieht sich auf ein explizit benanntes Team:

* Ein Team wird anhand seines **exakten Anzeigenamens** (Groß-/Kleinschreibung wird ignoriert, konsistent mit Microsoft Graph; umgebende Leerzeichen im konfigurierten Namen werden ignoriert). Nur dieses Team wird verarbeitet – es gibt kein Präfix- oder Platzhalterverhalten, daher bewirkt ein Eintrag mit dem Namen `EXT Service A` niemals etwas bei `EXT Service A Backup` oder Ähnlichem.
* Anzeigenamen sind in Entra ID nicht eindeutig garantiert. Wenn mehrere Teams den konfigurierten Namen teilen, wird die Eigentümergruppe auf **alle** alle angewendet. Wenn kein Team übereinstimmt, wird der Eintrag gemeldet als *nicht gefunden* und übersprungen.

#### Teamauswahl

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

#### Was geändert wird

* **Team (optional, `IncludeTeamOwners`, Standard: aktiviert):** die Benutzer der Eigentümergruppe werden als Besitzer und Mitglieder der übergeordneten M365-Gruppe hinzugefügt. Die Team-Mitgliedschaft ist auch die technische Voraussetzung dafür, ein Shared-Channel-Besitzer zu werden, daher aktiviert dieser Schritt den Kanal-Schritt.
* **Shared Channels:** für jeden gehosteten Shared Channel (`membershipType eq 'shared'`), wird für jeden Benutzer der Eigentümergruppe sichergestellt, dass er ein Kanal- **Besitzer** - direkt hinzugefügt, wenn er fehlt, oder befördert, wenn er bereits Mitglied ist. Wird ein direktes Hinzufügen als Besitzer abgelehnt (z. B. aufgrund von Replikationsverzögerungen der Mitgliedschaft), fällt das Runbook darauf zurück, den Benutzer zuerst als Mitglied hinzuzufügen und ihn dann zu befördern.

#### Testlauf

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

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

* **`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 die E-Mail eingebettet werden, wenn beide Optionen aktiviert sind). Der Ziel-Storage Account wird aus den `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 und keine Graph-Anwendungsberechtigung).

#### Planung

Konzipiert für den unbeaufsichtigten Betrieb nach Zeitplan. Da die Konfiguration zentral in den Org-Einstellungen liegt und das Runbook nur ergänzt und idempotent ist, hält ein einziger wiederkehrender Zeitplan alle zugeordneten Teams und ihre Shared Channels synchron, wenn Personen und Shared Channels kommen und gehen.

### E-Mail-Branding

Die Bericht-E-Mail berücksichtigt die optionalen `RJReport.Branding.*` Tenant-Einstellungen: ein benutzerdefiniertes Headerbild, ein benutzerdefiniertes Footerbild (öffentliche HTTPS-URLs, PNG/JPEG/GIF, max. 200 KB jeweils), einen benutzerdefinierten Footer-Link sowie benutzerdefinierte Akzent- und Textfarben (6-stellige Hex-Werte, z. B. `#0052cc`). Wenn diese Einstellungen nicht konfiguriert sind, werden die Standardgrafiken und -farben von RealmJoin verwendet. Ein Branding-Bild, das nicht heruntergeladen oder validiert werden kann, oder ein Farbwert, der keine gültige Hex-Farbe ist, verhindert niemals die Bericht-E-Mail – stattdessen wird der entsprechende Standard verwendet.

Siehe die [Dokumentation zu RealmJoin Report Settings](https://docs.realmjoin.com/automation/runbooks/runbook-report-settings) für Einrichtungsdetails.

### Ort

Organisation → Allgemein → Synchronisiere Shared Channel-Besitzer (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 über seinen exakten Anzeigenamen. Der versteckte 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 aus und fügt fehlende Team-Besitzer über /groups/{id}/owners/$ref hinzu*
  * GroupMember.ReadWrite.All
    * *Liest die transitiven Mitglieder der Eigentümergruppe aus und fügt Benutzer zuerst als Teammitglieder hinzu*
  * Channel.ReadBasic.All
    * *Listet /teams/{id}/channels auf, um die zu verarbeitenden Shared Channels zu finden*
  * ChannelMember.ReadWrite.All
    * *Liest Kanalmitglieder und fügt Benutzer hinzu oder befördert sie zum Shared-Channel-Besitzer*
  * 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 exakten Team-Anzeigenamens zu einer Owner-Sicherheitsgruppenobjekt-ID, z. B. \[{ "TeamName": "EXT Service A", "OwnerGroupId": "00000000-0000-0000-0000-000000000000" }]. Versteckter 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 | falsch |
| Standardwert | \[]    |
| Typ          | Objekt |

#### IncludeTeamOwners

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

| Eigenschaft  | Wert            |
| ------------ | --------------- |
| Erforderlich | falsch          |
| Standardwert | Wahr            |
| Typ          | Boolescher Wert |

#### 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          | Boolescher Wert |

#### SendEmailReport

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

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

#### EmailTo

E-Mail-Adresse(n) der Empfänger 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-Einstellung "RJReport.EmailSender".

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

#### BrandingHeaderImageUrl

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

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

#### BrandingFooterImageUrl

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

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

#### BrandingFooterLink

Optionale URL, auf die das Footerbild verlinkt. Stammt aus der Tenant-Einstellung 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 Vorlage der Bericht-E-Mail. Stammt aus der Tenant-Einstellung RJReport.Branding.AccentColor. Wenn leer oder ungültig, wird die standardmäßige Akzentfarbe von RealmJoin verwendet.

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

#### BrandingTextColor

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

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

#### ReportFileFormat

Steuert, welche Berichtsdateiformate generiert 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 Berichtdatei(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 aus.

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

#### 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.
