Sincronización programada de propietarios de canales compartidos
Asegúrese de que los miembros de un Security Group sean propietarios de los Teams asignados y de sus canales compartidos.
Descripción
Los canales compartidos de Teams no heredan la propiedad de su equipo principal. Este runbook programado soluciona esa brecha: para cada equipo nombrado en un mapeo, garantiza que los miembros de un Security Group asignado sean propietarios del equipo y de cada Shared Channel hospedado que aloje el equipo. El mapeo de nombre de equipo a grupo propietario se mantiene centralmente como una configuración de la organización RealmJoin. El runbook es solo adición: los propietarios y miembros existentes nunca se eliminan, por lo que los Shared Channel creados recientemente se detectan simplemente en la siguiente ejecución. Opcionalmente puede enviar por correo un informe y/o cargar los resultados CSV como un enlace de descarga. Consulte la documentación adjunta para conocer las reglas de mapeo y la configuración.
Cómo funciona
En cada ejecución, el runbook:
Lee el mapeo de nombre de equipo a grupo propietario desde la configuración de la organización
SharedChannelOwners.Mapping.Para cada entrada, busca el equipo por su nombre para mostrar exacto.
Expande el grupo propietario de esa entrada a sus miembros transitivos usuario miembros (los invitados se omiten; no pueden pertenecer a un Shared Channel).
Garantiza que esos usuarios sean propietarios del equipo y de cada hospedado Shared Channel del equipo.
El runbook es solo adición: nunca degrada ni elimina a los propietarios o miembros existentes. Por lo tanto, los nuevos Shared Channel creados se detectan automáticamente en la siguiente ejecución programada, sin alterar nada que ya esté en su lugar.
Configuración del mapeo
El mapeo reside centralmente en la configuración de la organización RealmJoin (Personalización del runbook → 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 para mostrar exacto del equipo (véase 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 un array estructurado (forma de subconfiguración recomendada) o como una cadena JSON, y normaliza ambas.
Coincidencia de equipos
Cada entrada de mapeo apunta a un equipo nombrado explícitamente:
Un equipo se corresponde por su nombre para mostrar exacto (sin distinguir mayúsculas de minúsculas, en consonancia con Microsoft Graph; el espacio en blanco circundante del nombre configurado se ignora). Solo se procesa ese equipo: no hay comportamiento de prefijo ni comodines, así que nombrar una entrada
EXT Service Anunca afecta aEXT Service A Backupni similares.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 no coincide ningún equipo, la entrada se informa como no encontrado y se omite.
Selección de equipos
Para cada TeamName configurado, el runbook ejecuta una consulta Graph displayName eq '...' y conserva solo los grupos 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 Shared Channel, por lo que este paso habilita el paso del canal.Shared Channel: para cada Shared Channel hospedado (
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 (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 propietario) y cualquier nombre de equipo configurado que no se haya encontrado.
Informes (opcional, ambos desactivados de forma predeterminada)
SendEmailReportenvía un correo con la marca RealmJoin (a través deSend-RjReportEmail) con estadísticas de ejecución y dos adjuntos CSV: un resumen por equipo y una lista de detalles por cambio. El remitente se toma de laRJReport.EmailSenderconfiguración.CreateDownloadLinkcarga los mismos CSV en una Storage Account y devuelve enlaces 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 laRJReport.StorageAccount.*configuraciones.
La carga al almacenamiento se autentica con la identidad administrada de la cuenta de Automation; esa identidad necesita el Storage Blob Data Contributor rol RBAC en la Storage Account de destino (esta es una asignación de RBAC de Azure, no un permiso de aplicación de 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 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 → Sync Sharedchannel Owners (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
Mapeo de un nombre exacto para mostrar de equipo a un identificador de objeto de Security Group 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 RealmJoin inyecta ese valor; el runbook lo acepta ya sea como el objeto/array deserializado (subconfiguraciones estructuradas) o como una cadena JSON, y normaliza ambas.
Requerido
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 del canal.
Requerido
false
Valor predeterminado
Verdadero
Tipo
Booleano
WhatIfMode
Cuando está habilitado, el runbook solo registra los cambios que haría sin escribir nada.
Requerido
false
Valor predeterminado
False
Tipo
Booleano
SendEmailReport
Cuando está habilitado, se envía un informe por correo con la marca RealmJoin mediante Send-RjReportEmail después de la ejecución. El cuerpo contiene estadísticas de ejecución y dos adjuntos CSV (resumen por equipo y detalle por cambio).
Requerido
false
Valor predeterminado
False
Tipo
Booleano
EmailTo
Dirección o direcciones de correo del destinatario para el informe (separadas por comas). Solo se usa cuando SendEmailReport está habilitado.
Requerido
false
Valor predeterminado
Tipo
Cadena
EmailFrom
Buzón remitente para el informe. Vinculado a la configuración de la organización "RJReport.EmailSender".
Requerido
false
Valor predeterminado
Tipo
Cadena
CreateDownloadLink
Cuando está habilitado, los informes CSV se cargan en una Storage Account y se devuelve un enlace de descarga con tiempo limitado (e incluido en el informe por correo si eso también está habilitado). Desactivado de forma predeterminada.
Requerido
false
Valor predeterminado
False
Tipo
Booleano
ContainerName
Contenedor de Storage usado para la carga. Configurado por runbook (no es una configuración global de RJReport).
Requerido
false
Valor predeterminado
shared-channel-owners
Tipo
Cadena
ResourceGroupName
Grupo de recursos que contiene la Storage Account. Vinculado a "RJReport.StorageAccount.ResourceGroup".
Requerido
false
Valor predeterminado
Tipo
Cadena
StorageAccountName
Storage Account usada para la carga. Vinculada a "RJReport.StorageAccount.StorageAccountName".
Requerido
false
Valor predeterminado
Tipo
Cadena
LinkExpiryDays
Días hasta que caduca el enlace de descarga generado. Vinculado a "RJReport.StorageAccount.LinkExpiryDays".
Requerido
false
Valor predeterminado
6
Tipo
Int32
Última actualización
¿Te fue útil?