> 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/es/automatizacion/runbooks/runbook-references/org/general/sync-sharedchannel-owners_scheduled.md).

# Sincronización programada de propietarios de canales compartidos

### Descripción

Los canales compartidos de Teams no heredan la propiedad de su equipo principal. Este runbook programado cierra esa brecha: para cada equipo nombrado en una asignación, garantiza que los miembros de un Security Group asignado sean propietarios del equipo y de cada canal compartido que aloja el equipo. La asignación de nombre de equipo a grupo de propietarios se mantiene de forma centralizada como una configuración de la organización de RealmJoin. El runbook es de solo adición: los propietarios y miembros existentes nunca se eliminan, por lo que los canales compartidos creados recientemente se recogen simplemente en la siguiente ejecución. Opcionalmente puede enviar por correo electrónico un informe y/o cargar los resultados CSV como un enlace de descarga. Consulte la documentación adjunta para conocer las reglas de asignación y la configuración.

### Cómo funciona

En cada ejecución, el runbook:

1. Lee la asignación de nombre de equipo a grupo de propietarios desde la configuración de la organización `SharedChannelOwners.Mapping`.
2. Para cada entrada, busca el equipo por su **nombre exacto para mostrar**.
3. Expande el grupo de propietarios de esa entrada a sus miembros transitivos de **usuario** (se omiten los invitados; no pueden pertenecer a un canal compartido).
4. Garantiza que esos usuarios sean propietarios del equipo y de cada **alojado** canal compartido del equipo.

El runbook es **de solo adición**: nunca degrada ni elimina a los propietarios o miembros existentes. Por ello, los canales compartidos creados recientemente se detectan automáticamente en la siguiente ejecución programada, sin alterar nada ya existente.

#### Configuración de la asignación

La asignación reside de forma centralizada en la configuración de la organización de RealmJoin (Personalización del runbook → `bloque de configuración` → `SharedChannelOwners.Mapping`) por lo que se mantiene una sola vez y se comparte por cada programación. Es una lista de `{ TeamName, OwnerGroupId }` objetos, donde `TeamName` es el **nombre exacto para mostrar del equipo** (consulte la *Notas* sección para un ejemplo listo para usar). El parámetro oculto `TeamOwnerGroupMapping` se inyecta desde esta configuración; el runbook lo acepta ya sea como una matriz estructurada (forma de subconfiguración recomendada) o como una cadena JSON y normaliza ambas.

#### Emparejamiento de equipos

Cada entrada de la asignación apunta a un equipo con nombre explícito:

* Un equipo se empareja por su **nombre exacto para mostrar** (sin distinción entre mayúsculas y minúsculas, coherente con Microsoft Graph; se ignora el espacio en blanco circundante en el nombre configurado). Solo se procesa ese equipo: no existe comportamiento de prefijo ni comodín, por lo que nombrar una entrada `EXT Service A` nunca afecta a `EXT Service A Backup` o similar.
* Los nombres para mostrar no tienen garantía de ser únicos en Entra ID. Si varios equipos comparten el nombre configurado, el grupo de propietarios se aplica a **todos** ellos. Si no coincide ningún equipo, la entrada se informa como *no encontrado* y se omite.

#### Selección de equipo

Para cada `TeamName` configurado `el runbook ejecuta una consulta Graph` displayName eq '...' **y conserva solo los grupos de Microsoft 365 que están aprovisionados como un**.

#### Qué se cambia

* **Equipo (opcional, `IncludeTeamOwners`, activado de forma predeterminada):** los usuarios del grupo de propietarios se agregan como propietarios y miembros del grupo M365 principal. La pertenencia al equipo también es el requisito técnico previo para convertirse en propietario de un canal compartido, por lo que este paso habilita el paso del canal.
* **Canales compartidos:** para cada canal compartido alojado (`membershipType eq 'shared'`), se garantiza que cada usuario del grupo de propietarios sea un **propietario** del canal: se agrega directamente si falta, o se promociona si ya es miembro. Si se rechaza una adición directa como propietario (por ejemplo, por retraso en la replicación de la pertenencia), el runbook recurre a agregar primero al usuario como miembro y luego promocionarlo.

#### Ejecución en seco

Establezca **`WhatIfMode`** para registrar qué cambiaría sin escribir nada. En este modo, el runbook imprime de antemano los equipos que procesaría (con su grupo de propietarios) y cualquier nombre de equipo configurado que no se encontró.

#### Informe (opcional, ambos desactivados de forma predeterminada)

* **`SendEmailReport`** envía un correo electrónico con la marca de RealmJoin (mediante `Send-RjReportEmail`) con estadísticas de la ejecución y dos archivos adjuntos CSV: un resumen por equipo y una lista detallada por cambio. El remitente se toma de la `RJReport.EmailSender` configuración.
* **`CreateDownloadLink`** carga los mismos CSV en una cuenta de almacenamiento y devuelve enlaces SAS de descarga con tiempo limitado (también incrustados en el correo electrónico cuando ambas opciones están habilitadas). La cuenta de almacenamiento de destino se toma de la `RJReport.StorageAccount.*` configuraciones.

La carga en el almacenamiento se autentica con la identidad administrada de la cuenta de Automation; esa identidad necesita el **Storage Blob Data Contributor** rol RBAC en la cuenta de almacenamiento de destino (esto es una asignación Azure RBAC, no un permiso de aplicación de Graph).

#### Programación

Diseñado para ejecutarse desatendido según una programación. Debido a que la configuración está centralizada en la configuración de la organización y el runbook es de solo adición e idempotente, una sola programación recurrente mantiene sincronizados todos los equipos asignados y sus canales compartidos a medida que las personas y los canales entran y salen.

### Ubicación

Organización → General → Sincronizar propietarios de canales compartidos (Programado)

**Nombre completo del runbook**

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

### Permisos

#### Permisos de aplicación

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

### Parámetros

#### TeamOwnerGroupMapping

Asignación de un nombre exacto para mostrar del equipo a un id de objeto de un Security Group propietario, p. ej. \[{ "TeamName": "EXT Service A", "OwnerGroupId": "00000000-0000-0000-0000-000000000000" }]. Parámetro oculto, vinculado a la configuración de la organización "SharedChannelOwners.Mapping". El portal RealmJoin inyecta ese valor; el runbook lo acepta ya sea como el objeto/matriz deserializado (subconfiguraciones estructuradas) o como una cadena JSON y normaliza ambas.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Requerido            | falso  |
| Valor predeterminado | \[]    |
| Tipo                 | Objeto |

#### IncludeTeamOwners

Cuando está habilitado (predeterminado), los miembros del grupo de propietarios también se garantizan como propietarios y miembros del propio equipo principal (propietarios/miembros del grupo M365). La pertenencia al equipo también es el requisito previo para la propiedad del canal.

| Propiedad            | Valor     |
| -------------------- | --------- |
| Requerido            | falso     |
| Valor predeterminado | Verdadero |
| Tipo                 | Booleano  |

#### WhatIfMode

Cuando está habilitado, el runbook solo registra los cambios que haría sin escribir nada.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Requerido            | falso    |
| Valor predeterminado | Falso    |
| Tipo                 | Booleano |

#### SendEmailReport

Cuando está habilitado, se envía un informe por correo electrónico con la marca de RealmJoin mediante Send-RjReportEmail después de la ejecución. El cuerpo contiene estadísticas de la ejecución y dos archivos adjuntos CSV (resumen por equipo y detalle por cambio).

| Propiedad            | Valor    |
| -------------------- | -------- |
| Requerido            | falso    |
| Valor predeterminado | Falso    |
| Tipo                 | Booleano |

#### Correo electrónico del destinatario

Direcciones de correo electrónico de los destinatarios del informe (separadas por comas). Solo se usa cuando SendEmailReport está habilitado.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Requerido            | falso  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### Correo electrónico del remitente

Buzón del remitente para el informe. Vinculado a la configuración de la organización "RJReport.EmailSender".

| Propiedad            | Valor  |
| -------------------- | ------ |
| Requerido            | falso  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### CreateDownloadLink

Cuando está habilitado, los informes CSV se cargan en una cuenta de almacenamiento y se devuelve un enlace de descarga con tiempo limitado (e incluido en el informe por correo electrónico si eso también está habilitado). Desactivado de forma predeterminada.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Requerido            | falso    |
| Valor predeterminado | Falso    |
| Tipo                 | Booleano |

#### Nombre del contenedor

Contenedor de almacenamiento utilizado para la carga. Configurado por runbook (no es una configuración global de RJReport).

| Propiedad            | Valor                 |
| -------------------- | --------------------- |
| Requerido            | falso                 |
| Valor predeterminado | shared-channel-owners |
| Tipo                 | Cadena                |

#### Nombre del grupo de recursos

Grupo de recursos que contiene la cuenta de almacenamiento. Vinculado a "RJReport.StorageAccount.ResourceGroup".

| Propiedad            | Valor  |
| -------------------- | ------ |
| Requerido            | falso  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### StorageAccountName

Cuenta de almacenamiento usada para la carga. Vinculada a "RJReport.StorageAccount.StorageAccountName".

| Propiedad            | Valor  |
| -------------------- | ------ |
| Requerido            | falso  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### LinkExpiryDays

Días hasta que expire el enlace de descarga generado. Vinculado a "RJReport.StorageAccount.LinkExpiryDays".

| Propiedad            | Valor |
| -------------------- | ----- |
| Requerido            | falso |
| Valor predeterminado | 6     |
| Tipo                 | Int32 |

[Volver a la vista general de la referencia del runbook](/es/automatizacion/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/es/automatizacion/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.
