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

# Sincronizar propietarios de canal compartido programado

### Descripción

Los Shared Channel 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 grupo de seguridad asignado sean propietarios del equipo y de cada Shared Channel que el equipo aloja. La asignación de nombre de equipo a grupo propietario se mantiene de forma centralizada como una configuración de la organización de RealmJoin. El runbook solo agrega: los propietarios y miembros existentes nunca se eliminan, por lo que los Shared Channel recién creados se detectan simplemente en la siguiente ejecución. Opcionalmente puede enviar un informe por correo electrónico y/o cargar los archivos del informe como un vínculo de descarga. El parámetro ReportFileFormat controla qué formatos de archivo de informe se generan y entregan (solo CSV, CSV y XLSX, o solo XLSX). Cuando los archivos adjuntos CSV superan el límite de tamaño del correo y se selecciona "CSV & XLSX", el correo recurre solo al libro de Excel. 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 propietario de la configuración de la organización `SharedChannelOwners.Mapping`.
2. Para cada entrada, busca el equipo por su **nombre para mostrar exacto**.
3. Expande el grupo propietario de esa entrada a sus miembros transitivos **usuario** miembros (se omiten los invitados; no pueden pertenecer a un Shared Channel).
4. Garantiza que esos usuarios sean propietarios del equipo y de cada **alojado** Shared Channel alojado del equipo.

El runbook es **solo agrega**: nunca rebaja ni elimina a los propietarios o miembros existentes. Por lo tanto, los Shared Channel recién creados se toman automáticamente en la siguiente ejecución programada, sin alterar nada de lo que ya está en su lugar.

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

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

#### Coincidencia de equipos

Cada entrada de la asignación apunta a un equipo nombrado explícitamente:

* Un equipo se identifica por su **nombre para mostrar exacto** (sin distinguir mayúsculas y minúsculas, en consonancia con Microsoft Graph; los espacios en blanco alrededor del nombre configurado se ignoran). Solo se procesa ese equipo; no hay comportamiento de prefijo ni comodín, por lo que nombrar una entrada `EXT Service A` nunca afecta a `EXT Service A Backup` ni a algo similar.
* Los nombres para mostrar no están garantizados como únicos en Entra ID. Si varios equipos comparten el nombre configurado, el grupo propietario se aplica a **todos** ellos. Si ningún equipo coincide, la entrada se informa como *no encontrada* y se omite.

#### Selección de equipos

Para cada `TeamName` configurado, el runbook ejecuta una consulta de Graph `displayName eq '...'` y conserva solo los grupos de Microsoft 365 aprovisionados como **equipo**.

#### Qué se cambia

* **Equipo (opcional, `IncludeTeamOwners`, activado de forma predeterminada):** los usuarios del grupo propietario 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.
* **Shared Channel:** para cada Shared Channel alojado (`membershipType eq 'shared'`), se garantiza que cada usuario del grupo propietario sea un **propietario** - se agrega directamente si falta, o se promociona si ya es miembro. Si se rechaza una adición directa como propietario (p. ej., por retraso en la replicación de la membresía), 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 muestra por adelantado los equipos que procesaría (con su grupo propietario) y cualquier nombre de equipo configurado que no se haya encontrado.

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

* **`SendEmailReport`** envía un correo con la marca de RealmJoin (a través de `Send-RjReportEmail`) con las 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 Storage Account y devuelve vínculos de descarga SAS con tiempo limitado (también incrustados en el correo cuando ambas opciones están habilitadas). La Storage Account 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 rol RBAC de **Storage Blob Data Contributor** en la Storage Account de destino (esta es una asignación de Azure RBAC, no un permiso de aplicación de Microsoft Graph).

#### Programación

Diseñado para ejecutarse sin supervisión según una programación. Como 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 Shared Channel a medida que las personas y los canales van y vienen.

### Ubicación

Organización → General → Sincronizar propietarios de Shared Channel (Programado)

**Nombre completo del runbook**

rjgit-org\_general\_sync-shared-channel-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 grupo de seguridad propietario, por ejemplo \[{ "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 de RealmJoin inyecta ese valor; el runbook lo acepta ya sea como el objeto/arreglo deserializado (subconfiguraciones estructuradas) o como una cadena JSON y normaliza ambos.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado | \[]    |
| Tipo                 | Objeto |

#### IncludeTeamOwners

Cuando está habilitado (predeterminado), también se garantiza que los miembros del grupo propietario sean 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 de canales.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | True     |
| Tipo                 | Booleano |

#### WhatIfMode

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

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### SendEmailReport

Cuando está habilitado, después de la ejecución se envía un informe por correo con la marca de RealmJoin mediante Send-RjReportEmail. El cuerpo contiene estadísticas de la ejecución; los archivos del informe (resumen por equipo y detalle por cambio) se adjuntan en el/los formato(s) de archivo de informe seleccionado(s).

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### EmailTo

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

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### EmailFrom

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

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### ReportFileFormat

Controla qué formatos de archivo del informe se generan y entregan: "solo CSV", "CSV y XLSX" (predeterminado) o "solo XLSX".

| Propiedad            | Valor      |
| -------------------- | ---------- |
| Obligatorio          | false      |
| Valor predeterminado | CSV & XLSX |
| Tipo                 | Cadena     |

#### CreateDownloadLink

Cuando está habilitado, el/los archivo(s) del informe se cargan en una Storage Account y se devuelven vínculos de descarga con tiempo limitado (e incluidos en el informe por correo si eso también está habilitado). Desactivado de forma predeterminada.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### ContainerName

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

| Propiedad            | Valor                 |
| -------------------- | --------------------- |
| Obligatorio          | false                 |
| Valor predeterminado | shared-channel-owners |
| Tipo                 | Cadena                |

#### ResourceGroupName

Grupo de recursos que contiene la Storage Account. Vinculado a "RJReport.StorageAccount.ResourceGroup".

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### StorageAccountName

Storage Account usada para la carga. Vinculada a "RJReport.StorageAccount.StorageAccountName".

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### LinkExpiryDays

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

| Propiedad            | Valor |
| -------------------- | ----- |
| Obligatorio          | false |
| Valor predeterminado | 6     |
| Tipo                 | Int32 |

[Volver al resumen de 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, and the optional `goal` query parameter:

```
GET https://docs.realmjoin.com/es/automatizacion/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.
