> 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/fr/automatisation/runbooks/runbook-references/org/general/sync-shared-channel-owners_scheduled.md).

# Synchronisation planifiée des propriétaires du Shared Channel

{% hint style="info" %}
Il s'agit d'un runbook planifié. Il est conçu pour s'exécuter selon une planification récurrente plutôt que d'être déclenché pour un seul objet. Voir [Planification](/fr/automatisation/runbooks/scheduling.md) pour plus de détails sur la façon de configurer les planifications du runbook.
{% endhint %}

### Description

Les Shared Channels de Teams n’héritent pas de la propriété de leur équipe parente. Ce runbook planifié comble cette lacune : pour chaque équipe nommée dans un mappage, il s’assure que les membres d’un groupe de sécurité mappé sont propriétaires de l’équipe et de chaque Shared Channel hébergée par l’équipe. Le mappage du nom de l’équipe vers le groupe de propriétaires est maintenu de façon centralisée comme paramètre d’organisation RealmJoin. Le runbook est en ajout uniquement - les propriétaires et membres existants ne sont jamais supprimés - de sorte que les Shared Channels nouvellement créées sont simplement prises en compte lors de la prochaine exécution. Il peut éventuellement envoyer un rapport par e-mail et/ou téléverser les fichiers de rapport sous forme de lien de téléchargement. Le paramètre ReportFileFormat contrôle les formats de fichier de rapport générés et remis (CSV uniquement, CSV et XLSX, ou XLSX uniquement). Lorsque les pièces jointes CSV dépassent la limite de taille de l’e-mail et que "CSV & XLSX" est sélectionné, l’e-mail revient au seul classeur Excel. Consultez la documentation associée pour les règles de mappage et la configuration.

### Fonctionnement

À chaque exécution, le runbook :

1. Lit le mappage du nom de l’équipe vers le groupe de propriétaires à partir du paramètre d’organisation `SharedChannelOwners.Mapping`.
2. Pour chaque entrée, recherche l’équipe par son **nom d’affichage exact**.
3. Développe le groupe de propriétaires de cette entrée jusqu’à ses **utilisateurs** membres transitifs (les invités sont ignorés - ils ne peuvent pas appartenir à un Shared Channel).
4. S’assure que ces utilisateurs sont propriétaires de l’équipe et de chaque **hébergée** Shared Channel de l’équipe.

Le runbook est **en ajout uniquement**: il ne rétrograde ni ne supprime jamais les propriétaires ou membres existants. Les Shared Channels nouvellement créées sont donc prises en compte automatiquement lors de la prochaine exécution planifiée, sans perturber ce qui est déjà en place.

#### Configuration du mappage

Le mappage réside de façon centralisée dans les paramètres d’organisation RealmJoin (Personnalisation du runbook → `Paramètres` → `SharedChannelOwners.Mapping`) afin qu’il soit maintenu une seule fois et partagé par chaque planification. Il s’agit d’une liste d’objets `{ TeamName, OwnerGroupId }` où `TeamName` est le **nom d’affichage exact de l’équipe** (voir la *Notes* section pour un exemple prêt à l’emploi). Le paramètre masqué `TeamOwnerGroupMapping` est injecté à partir de ce paramètre ; le runbook l’accepte soit comme tableau structuré (forme de sous-paramètre recommandée), soit comme chaîne JSON, et normalise les deux.

#### Correspondance des équipes

Chaque entrée de mappage cible une équipe nommée explicitement :

* Une équipe est mise en correspondance par son **nom d’affichage exact** (insensible à la casse, conformément à Microsoft Graph ; les espaces blancs autour du nom configuré sont ignorés). Seule cette équipe est traitée - il n’y a aucun comportement de préfixe ou générique, donc nommer une entrée `EXT Service A` n’affecte jamais `EXT Service A Backup` ou similaire.
* Les noms d’affichage ne sont pas garantis uniques dans Entra ID. Si plusieurs équipes partagent le nom configuré, le groupe de propriétaires est appliqué à **tous** chacune d’elles. Si aucune équipe ne correspond, l’entrée est signalée comme *introuvable* et ignorée.

#### Sélection des équipes

Pour chaque `TeamName` configuré, le runbook exécute une requête Graph `displayName eq '...'` et ne conserve que les groupes Microsoft 365 qui sont provisionnés comme **Team**.

#### Ce qui est modifié

* **Team (facultatif, `IncludeTeamOwners`, activé par défaut) :** les utilisateurs du groupe de propriétaires sont ajoutés comme propriétaires et membres du groupe M365 parent. L’appartenance à l’équipe est également le prérequis technique pour devenir propriétaire d’un Shared Channel, donc cette étape active l’étape des canaux.
* **Shared Channels :** pour chaque Shared Channel hébergé (`membershipType eq 'shared'`), chaque utilisateur du groupe de propriétaires est assuré d’être un **propriétaire** du Shared Channel - ajouté directement s’il est absent, ou promu s’il est déjà membre. Si l’ajout direct comme propriétaire est refusé (par exemple, latence de réplication de l’appartenance), le runbook revient à ajouter d’abord l’utilisateur comme membre, puis à le promouvoir.

#### Exécution à blanc

Définissez **`WhatIfMode`** pour consigner ce qui changerait sans rien écrire. Dans ce mode, le runbook affiche d’avance les équipes qu’il traiterait (avec leur groupe de propriétaires) ainsi que les noms d’équipe configurés introuvables.

#### Rapportage (facultatif, les deux sont désactivés par défaut)

* **`SendEmailReport`** envoie un e-mail au nom de RealmJoin (via `Send-RjReportEmail`) avec les statistiques d’exécution et deux pièces jointes CSV : un résumé par équipe et une liste détaillée par changement. L’expéditeur est pris à partir du paramètre `RJReport.EmailSender` .
* **`CreateDownloadLink`** téléverse les mêmes CSV vers un compte de stockage et renvoie des liens de téléchargement SAS à durée limitée (également intégrés dans l’e-mail lorsque les deux options sont activées). Le compte de stockage cible est pris à partir des paramètres `paramètres du locataire RJReport.StorageAccount.*` .

Le téléversement vers le stockage s’authentifie avec l’identité managée du compte Automation ; cette identité a besoin du **rôle RBAC Storage Blob Data Contributor** sur le compte de stockage cible (il s’agit d’une affectation Azure RBAC, pas d’une autorisation d’application Graph).

#### Planification

Conçu pour s’exécuter sans surveillance selon une planification. Comme la configuration est centralisée dans les paramètres d’organisation et que le runbook est en ajout uniquement et idempotent, une seule planification récurrente maintient tous les Teams mappés et leurs Shared Channels synchronisés à mesure que les personnes et les canaux vont et viennent.

### Branding de l’e-mail

L’e-mail du rapport respecte les `RJReport.Branding.*` paramètres Tenant facultatifs : une image d’en-tête personnalisée, une image de pied de page personnalisée (URL HTTPS publiques, PNG/JPEG/GIF, 200 KB max. chacune), un lien de pied de page personnalisé, ainsi que des couleurs d’accent et de texte personnalisées (valeurs hexadécimales à 6 chiffres, par ex. `#0052cc`). Lorsque ces paramètres ne sont pas configurés, les graphiques et couleurs par défaut de RealmJoin sont utilisés. Une image de branding qui ne peut pas être téléchargée ou validée, ou une valeur de couleur qui n’est pas une couleur hexadécimale valide, n’empêche jamais l’envoi de l’e-mail du rapport - la valeur par défaut correspondante est utilisée à la place.

Voir la [documentation RealmJoin Report Settings](https://docs.realmjoin.com/automation/runbooks/runbook-report-settings) pour les détails de configuration.

### Emplacement

Organisation → Général → Synchroniser les propriétaires des Shared Channels (planifié)

**Nom complet du runbook**

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

### Détails

| Propriété      | Valeur                                                                                                            |
| -------------- | ----------------------------------------------------------------------------------------------------------------- |
| Version        | 1.3.0                                                                                                             |
| Modules requis | <p>RealmJoin.RunbookHelper (>= 0.8.9)<br>Microsoft.Graph.Authentication (>= 2.39.0)<br>Az.Accounts (>= 5.5.2)</p> |
| Planifiable    | oui                                                                                                               |

### Notes

Configurez le mappage une seule fois de façon centralisée (Runbook Customization -> Paramètres) comme sous-paramètre structuré sous "SharedChannelOwners.Mapping". Chaque entrée nomme une équipe par son nom d’affichage exact. Le paramètre masqué TeamOwnerGroupMapping en est injecté à l’exécution. { "Settings": { "SharedChannelOwners": { "Mapping": \[ { "TeamName": "EXT Service A", "OwnerGroupId": "11111111-1111-1111-1111-111111111111" }, { "TeamName": "EXT Service B", "OwnerGroupId": "22222222-2222-2222-2222-222222222222" } ] } } }

### Autorisations

#### Autorisations d’application

* **Type**: Microsoft Graph
  * Group.ReadWrite.All
    * *Liste les équipes, lit les propriétaires du groupe et ajoute les propriétaires d’équipe manquants via /groups/{id}/owners/$ref*
  * GroupMember.ReadWrite.All
    * *Lit les membres transitifs du groupe de propriétaires et ajoute d’abord les utilisateurs comme membres de l’équipe*
  * Channel.ReadBasic.All
    * *Liste /teams/{id}/channels pour trouver les Shared Channels à traiter*
  * ChannelMember.ReadWrite.All
    * *Lit les membres du Shared Channel et ajoute les utilisateurs ou les promeut au rang de propriétaire du Shared Channel*
  * Mail.Send *(facultatif — fonctionnalité : rapport par e-mail)*
    * *Envoie l’e-mail de rapport de synchronisation via Send-RjReportEmail lorsque EmailTo est configuré*
  * User.Read.All
    * *Lit les propriétés de l’utilisateur membre (UPN, userType) via transitiveMembers pour filtrer les invités*
  * Organization.Read.All *(facultatif — fonctionnalité : rapport par e-mail)*
    * *Lit le nom d’affichage du Tenant pour l’e-mail de rapport*

### Paramètres

#### TeamOwnerGroupMapping

Mappage d’un nom d’affichage exact d’équipe vers l’ID d’objet d’un groupe de sécurité propriétaire, par ex. \[{ "TeamName": "EXT Service A", "OwnerGroupId": "00000000-0000-0000-0000-000000000000" }]. Paramètre masqué, lié au paramètre d’organisation "SharedChannelOwners.Mapping". Le portail RealmJoin injecte cette valeur ; le runbook l’accepte soit comme objet/tableau désérialisé (sous-paramètres structurés), soit comme chaîne JSON, et normalise les deux.

| Propriété         | Valeur |
| ----------------- | ------ |
| Obligatoire       | faux   |
| Valeur par défaut | \[]    |
| Type              | Objet  |

#### IncludeTeamOwners

Lorsqu’il est activé (par défaut), les membres du groupe de propriétaires sont aussi assurés comme propriétaires et membres de l’équipe parente elle-même (propriétaires/membres du groupe Microsoft 365). L’appartenance à l’équipe est également le prérequis pour la propriété du canal.

| Propriété         | Valeur  |
| ----------------- | ------- |
| Obligatoire       | faux    |
| Valeur par défaut | Vrai    |
| Type              | Booléen |

#### WhatIfMode

Lorsqu’il est activé, le runbook journalise uniquement les modifications qu’il ferait, sans rien écrire.

| Propriété         | Valeur  |
| ----------------- | ------- |
| Obligatoire       | faux    |
| Valeur par défaut | Faux    |
| Type              | Booléen |

#### SendEmailReport

Lorsqu’il est activé, un rapport par e-mail au nom de RealmJoin est envoyé via Send-RjReportEmail après l’exécution. Le corps contient les statistiques d’exécution ; les fichiers de rapport (résumé par équipe et détail par changement) sont joints dans le(s) format(s) de fichier de rapport sélectionné(s).

| Propriété         | Valeur  |
| ----------------- | ------- |
| Obligatoire       | faux    |
| Valeur par défaut | Faux    |
| Type              | Booléen |

#### EmailTo

Adresse(s) e-mail des destinataires du rapport (séparées par des virgules). Utilisé uniquement lorsque SendEmailReport est activé.

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### EmailFrom

Boîte aux lettres d’envoi pour le rapport. Liée au paramètre d’organisation "RJReport.EmailSender".

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### BrandingHeaderImageUrl

URL HTTPS publique facultative d’une image d’en-tête personnalisée (PNG/JPEG/GIF, 200 KB max.) pour l’e-mail du rapport. Provenant du paramètre Tenant RJReport.Branding.HeaderImageUrl. Lorsqu’elle est vide, l’image d’en-tête par défaut de RealmJoin est utilisée.

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### BrandingFooterImageUrl

URL HTTPS publique facultative d’une image de pied de page personnalisée (PNG/JPEG/GIF, 200 KB max.) pour l’e-mail du rapport. Provenant du paramètre Tenant RJReport.Branding.FooterImageUrl. Lorsqu’elle est vide, l’image de pied de page par défaut de RealmJoin est utilisée.

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### BrandingFooterLink

URL facultative vers laquelle pointe l’image de pied de page. Provenant du paramètre Tenant RJReport.Branding.FooterLink. Lorsqu’elle est vide, le lien par défaut (<https://www.realmjoin.com>) est utilisé.

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### BrandingAccentColor

Remplacement facultatif de la couleur d’accent (hexadécimal à 6 chiffres, par ex. '#0052cc') pour le modèle d’e-mail du rapport. Provenant du paramètre Tenant RJReport.Branding.AccentColor. Lorsqu’elle est vide ou invalide, la couleur d’accent par défaut de RealmJoin est utilisée.

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### BrandingTextColor

Remplacement facultatif de la couleur du texte (hexadécimal à 6 chiffres) pour le modèle d’e-mail du rapport. Provenant du paramètre Tenant RJReport.Branding.TextColor. Lorsqu’elle est vide ou invalide, la couleur du texte par défaut de RealmJoin est utilisée.

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### ReportFileFormat

Contrôle quels formats de fichier de rapport sont générés et fournis : « CSV uniquement », « CSV & XLSX » (par défaut) ou « XLSX uniquement ».

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut | CSV & XLSX           |
| Type              | Chaîne de caractères |

#### CreateDownloadLink

Lorsqu’il est activé, le(s) fichier(s) de rapport est/sont téléversé(s) vers un compte de stockage et des liens de téléchargement à durée limitée sont renvoyés (et inclus dans le rapport par e-mail si cette option est également activée). Désactivé par défaut.

| Propriété         | Valeur  |
| ----------------- | ------- |
| Obligatoire       | faux    |
| Valeur par défaut | Faux    |
| Type              | Booléen |

#### ContainerName

Conteneur de stockage utilisé pour le téléversement. Configuré par runbook (et non comme un paramètre RJReport global).

| Propriété         | Valeur                |
| ----------------- | --------------------- |
| Obligatoire       | faux                  |
| Valeur par défaut | shared-channel-owners |
| Type              | Chaîne de caractères  |

#### ResourceGroupName

Groupe de ressources qui contient le Storage Account. Lié à "RJReport.StorageAccount.ResourceGroup".

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### StorageAccountName

Storage Account utilisé pour le téléversement. Lié à "RJReport.StorageAccount.StorageAccountName".

| Propriété         | Valeur               |
| ----------------- | -------------------- |
| Obligatoire       | faux                 |
| Valeur par défaut |                      |
| Type              | Chaîne de caractères |

#### LinkExpiryDays

Nombre de jours avant l’expiration du lien de téléchargement généré. Lié à "RJReport.StorageAccount.LinkExpiryDays".

| Propriété         | Valeur |
| ----------------- | ------ |
| Obligatoire       | faux   |
| Valeur par défaut | 6      |
| Type              | Int32  |

[Retour à l’aperçu de la référence du runbook](/fr/automatisation/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/fr/automatisation/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.
