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

# Sincronizar proprietários do Shared Channel agendado

{% hint style="info" %}
Este é um runbook agendado. Ele foi projetado para ser executado em um agendamento recorrente, em vez de ser acionado para um único objeto. Veja [Agendamento](/pt/automacao/runbooks/scheduling.md) para detalhes sobre como configurar os agendamentos do runbook.
{% endhint %}

### Descrição

Os Teams Shared Channel não herdam a propriedade da respetiva equipa principal. Este runbook agendado fecha essa lacuna: para cada equipa indicada num mapeamento, garante que os membros de um Security Group mapeado são proprietários da equipa e de cada Shared Channel alojado pela equipa. O mapeamento do nome da equipa para o grupo de proprietários é mantido centralmente como uma definição da organização RealmJoin. O runbook é apenas de adição - os proprietários e membros existentes nunca são removidos - por isso os Shared Channel criados recentemente são simplesmente detetados na próxima execução. Opcionalmente, pode enviar por e-mail um relatório e/ou carregar os ficheiros de relatório como um link de download. O parâmetro ReportFileFormat controla quais formatos de ficheiro de relatório são gerados e entregues (apenas CSV, CSV & XLSX, ou apenas XLSX). Quando os anexos CSV excedem o limite de tamanho do e-mail e "CSV & XLSX" é selecionado, o e-mail recorre apenas ao livro de trabalho do Excel. Consulte a documentação que o acompanha para as regras de mapeamento e configuração.

### Como funciona

Em cada execução, o runbook:

1. Lê o mapeamento do nome da equipa para o grupo de proprietários a partir da definição da organização `SharedChannelOwners.Mapping`.
2. Para cada entrada, procura a equipa pelo seu **nome de apresentação exato**.
3. Expande o grupo de proprietários dessa entrada para os seus **utilizador** membros transitivos (os convidados são ignorados - não podem pertencer a um Shared Channel).
4. Garante que esses utilizadores são proprietários da equipa e de cada **alojado** Shared Channel da equipa.

O runbook é **apenas de adição**: nunca rebaixa nem remove proprietários ou membros existentes. Os Shared Channel criados recentemente são, portanto, detetados automaticamente na próxima execução agendada, sem perturbar nada já em vigor.

#### Configuração do mapeamento

O mapeamento reside centralmente nas definições da organização RealmJoin (Personalização do Runbook → `Definições` → `SharedChannelOwners.Mapping`) para que seja mantido uma única vez e partilhado por cada agendamento. É uma lista de `{ TeamName, OwnerGroupId }` objetos, em que `TeamName` é o **nome de apresentação exato da equipa** (consulte a *Notas* secção para um exemplo pronto a usar). O parâmetro oculto `TeamOwnerGroupMapping` é injetado a partir desta definição; o runbook aceita-o quer como uma matriz estruturada (forma recomendada de subdefinição) quer como uma cadeia JSON e normaliza ambas.

#### Correspondência de equipas

Cada entrada de mapeamento visa uma equipa explicitamente nomeada:

* Uma equipa é correspondida pelo seu **nome de apresentação exato** (sem distinção entre maiúsculas e minúsculas, consistente com Microsoft Graph; os espaços em branco circundantes no nome configurado são ignorados). Só essa equipa é processada - não existe comportamento de prefixo nem de wildcard, por isso nomear uma entrada `EXT Service A` nunca afeta `EXT Service A Backup` ou semelhante.
* Os nomes de apresentação não têm garantia de serem únicos em Entra ID. Se várias equipas partilharem o nome configurado, o grupo de proprietários é aplicado a **todos os** todas elas. Se nenhuma equipa corresponder, a entrada é reportada como *não encontrada* e ignorada.

#### Seleção de equipas

Para cada `TeamName` o runbook executa uma consulta Graph `displayName eq '...'` pesquisa e mantém apenas grupos Microsoft 365 que estejam provisionados como um **Team**.

#### O que é alterado

* **Team (opcional, `IncludeTeamOwners`, predefinição ativada):** os utilizadores do grupo de proprietários são adicionados como proprietários e membros do grupo Microsoft 365 pai. A associação à equipa também é o pré-requisito técnico para se tornar proprietário de um Shared Channel, por isso este passo permite a etapa do canal.
* **Shared Channel:** para cada Shared Channel alojado (`membershipType eq 'shared'`), cada utilizador do grupo de proprietários é garantido como um canal **proprietário** - adicionado diretamente se estiver ausente, ou promovido se já for membro. Se uma adição direta de proprietário for rejeitada (por exemplo, devido a atraso na replicação da associação), o runbook recorre a adicionar primeiro o utilizador como membro e só depois promovê-lo.

#### Execução de teste

Defina **`WhatIfMode`** para registar o que mudaria sem escrever nada. Neste modo, o runbook apresenta antecipadamente as equipas que processaria (com o respetivo grupo de proprietários) e quaisquer nomes de equipa configurados que não tenham sido encontrados.

#### Relatórios (opcional, ambos desativados por predefinição)

* **`SendEmailReport`** envia um e-mail com a marca RealmJoin (através de `Send-RjReportEmail`) com estatísticas da execução e dois anexos CSV: um resumo por equipa e uma lista detalhada por alteração. O remetente é obtido da `RJReport.EmailSender` definição.
* **`CreateDownloadLink`** carrega os mesmos CSVs para uma Storage Account e devolve links de download SAS com tempo limitado (também incorporados no e-mail quando ambas as opções estão ativadas). A Storage Account de destino é obtida das `RJReport.StorageAccount.*` definições.

O carregamento para a Storage Account autentica-se com a identidade gerida da conta de Automação; essa identidade precisa da **Storage Blob Data Contributor** função RBAC na Storage Account de destino (esta é uma atribuição Azure RBAC, não uma permissão de aplicação Graph).

#### Agendamento

Concebido para ser executado sem supervisão numa agenda. Como a configuração está centralizada nas definições da organização e o runbook é apenas de adição e idempotente, uma única agenda recorrente mantém todas as equipas mapeadas e os seus Shared Channel em sincronização à medida que pessoas e canais entram e saem.

### Branding do e-mail

O e-mail do relatório respeita as configurações opcionais `RJReport.Branding.*` do tenant: uma imagem de cabeçalho personalizada, uma imagem de rodapé personalizada (URLs HTTPS públicas, PNG/JPEG/GIF, máx. 200 KB cada), um link de rodapé personalizado e cores personalizadas de destaque e de texto (valores hexadecimais de 6 dígitos, por ex. `#0052cc`). Quando essas configurações não estão definidas, são usadas as imagens e cores padrão do RealmJoin. Uma imagem de branding que não possa ser transferida por download ou validada, ou um valor de cor que não seja uma cor hex válida, nunca impede o e-mail do relatório - em vez disso, é usado o padrão correspondente.

Consulte a [documentação das Configurações de Relatório RealmJoin](https://docs.realmjoin.com/automation/runbooks/runbook-report-settings) para detalhes de configuração.

### Localização

Organização → Geral → Sincronizar proprietários de Shared Channel (Agendado)

**Nome completo do runbook**

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

### Detalhes

| Propriedade         | Valor                                                                                                             |
| ------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Versão              | 1.3.0                                                                                                             |
| Módulos necessários | <p>RealmJoin.RunbookHelper (>= 0.8.9)<br>Microsoft.Graph.Authentication (>= 2.39.0)<br>Az.Accounts (>= 5.5.2)</p> |
| Agendável           | sim                                                                                                               |

### Notas

Configure o mapeamento uma vez, centralmente (Personalização do Runbook -> Definições) como uma subdefinição estruturada sob "SharedChannelOwners.Mapping". Cada entrada nomeia uma equipa pelo seu nome de apresentação exato. O parâmetro oculto TeamOwnerGroupMapping é injetado a partir daí em tempo de execução. { "Settings": { "SharedChannelOwners": { "Mapping": \[ { "TeamName": "EXT Service A", "OwnerGroupId": "11111111-1111-1111-1111-111111111111" }, { "TeamName": "EXT Service B", "OwnerGroupId": "22222222-2222-2222-2222-222222222222" } ] } } }

### Permissões

#### Permissões de aplicação

* **Tipo**: Microsoft Graph
  * Group.ReadWrite.All
    * *Lista equipas, lê os proprietários do grupo e adiciona os proprietários de equipa em falta via /groups/{id}/owners/$ref*
  * GroupMember.ReadWrite.All
    * *Lê os membros transitivos do grupo de proprietários e adiciona primeiro os utilizadores como membros da equipa*
  * Channel.ReadBasic.All
    * *Lista /teams/{id}/channels para encontrar os Shared Channel a processar*
  * ChannelMember.ReadWrite.All
    * *Lê os membros do canal e adiciona utilizadores ou promove-os a proprietário do Shared Channel*
  * Mail.Send *(opcional — funcionalidade: relatório por e-mail)*
    * *Envia o e-mail do relatório de sincronização via Send-RjReportEmail quando EmailTo está configurado*
  * User.Read.All
    * *Lê propriedades de utilizador membro (UPN, userType) via transitiveMembers para filtrar convidados*
  * Organization.Read.All *(opcional — funcionalidade: relatório por e-mail)*
    * *Lê o nome de apresentação do Tenant para o e-mail do relatório*

### Parâmetros

#### TeamOwnerGroupMapping

Mapeamento de um nome de apresentação exato da equipa para o ID de objeto de um Security Group proprietário, por exemplo \[{ "TeamName": "EXT Service A", "OwnerGroupId": "00000000-0000-0000-0000-000000000000" }]. Parâmetro oculto, associado à definição da organização "SharedChannelOwners.Mapping". O portal RealmJoin injeta esse valor; o runbook aceita-o quer como o objeto/matriz desserializado (subdefinições estruturadas) quer como uma cadeia JSON e normaliza ambos.

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão | \[]    |
| Tipo         | Objeto |

#### IncludeTeamOwners

Quando ativado (predefinição), os membros do grupo de proprietários também são garantidos como proprietários e membros da própria equipa principal (proprietários/membros do grupo Microsoft 365). A associação à equipa é também o pré-requisito para a propriedade do canal.

| Propriedade  | Valor      |
| ------------ | ---------- |
| Obrigatório  | falso      |
| Valor padrão | Verdadeiro |
| Tipo         | Booleano   |

#### WhatIfMode

Quando ativado, o runbook apenas regista as alterações que faria sem escrever nada.

| Propriedade  | Valor    |
| ------------ | -------- |
| Obrigatório  | falso    |
| Valor padrão | Falso    |
| Tipo         | Booleano |

#### SendEmailReport

Quando ativado, um relatório de e-mail com a marca RealmJoin é enviado via Send-RjReportEmail após a execução. O corpo contém estatísticas da execução; os ficheiros de relatório (resumo por equipa e detalhe por alteração) são anexados nos formatos de ficheiro de relatório selecionados.

| Propriedade  | Valor    |
| ------------ | -------- |
| Obrigatório  | falso    |
| Valor padrão | Falso    |
| Tipo         | Booleano |

#### EmailTo

Endereço(s) de e-mail dos destinatários do relatório (separados por vírgulas). Usado apenas quando SendEmailReport está ativado.

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### EmailFrom

Caixa de correio do remetente para o relatório. Vinculada à definição da organização "RJReport.EmailSender".

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### BrandingHeaderImageUrl

URL HTTPS pública opcional de uma imagem de cabeçalho personalizada (PNG/JPEG/GIF, máx. 200 KB) para o e-mail do relatório. Obtida da configuração do tenant RJReport.Branding.HeaderImageUrl. Quando vazia, é usada a imagem padrão de cabeçalho do RealmJoin.

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### BrandingFooterImageUrl

URL HTTPS pública opcional de uma imagem de rodapé personalizada (PNG/JPEG/GIF, máx. 200 KB) para o e-mail do relatório. Obtida da configuração do tenant RJReport.Branding.FooterImageUrl. Quando vazia, é usada a imagem padrão de rodapé do RealmJoin.

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### BrandingFooterLink

URL opcional para onde a imagem de rodapé aponta. Obtida da configuração do tenant RJReport.Branding.FooterLink. Quando vazia, é usado o link padrão (<https://www.realmjoin.com>).

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### BrandingAccentColor

Substituição opcional da cor de destaque (hexadecimal de 6 dígitos, por ex. '#0052cc') para o modelo de e-mail do relatório. Obtida da configuração do tenant RJReport.Branding.AccentColor. Quando vazia ou inválida, é usada a cor de destaque padrão do RealmJoin.

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### BrandingTextColor

Substituição opcional da cor do texto (hexadecimal de 6 dígitos) para o modelo de e-mail do relatório. Obtida da configuração do tenant RJReport.Branding.TextColor. Quando vazia ou inválida, é usada a cor de texto padrão do RealmJoin.

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### ReportFileFormat

Controla quais formatos de ficheiro de relatório são gerados e entregues: "apenas CSV", "CSV & XLSX" (predefinição) ou "apenas XLSX".

| Propriedade  | Valor      |
| ------------ | ---------- |
| Obrigatório  | falso      |
| Valor padrão | CSV & XLSX |
| Tipo         | String     |

#### CreateDownloadLink

Quando ativado, o(s) ficheiro(s) de relatório são carregados para uma Storage Account e são devolvidos links de download com tempo limitado (e incluídos no e-mail do relatório, se isso também estiver ativado). Desativado por predefinição.

| Propriedade  | Valor    |
| ------------ | -------- |
| Obrigatório  | falso    |
| Valor padrão | Falso    |
| Tipo         | Booleano |

#### ContainerName

Contentor de Storage Account usado para o carregamento. Configurado por runbook (não uma definição global de RJReport).

| Propriedade  | Valor                 |
| ------------ | --------------------- |
| Obrigatório  | falso                 |
| Valor padrão | shared-channel-owners |
| Tipo         | String                |

#### ResourceGroupName

Grupo de recursos que contém a Storage Account. Vinculado a "RJReport.StorageAccount.ResourceGroup".

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### StorageAccountName

Storage Account usada para o carregamento. Vinculada a "RJReport.StorageAccount.StorageAccountName".

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | falso  |
| Valor padrão |        |
| Tipo         | String |

#### LinkExpiryDays

Dias até que o link de download gerado expire. Vinculado a "RJReport.StorageAccount.LinkExpiryDays".

| Propriedade  | Valor |
| ------------ | ----- |
| Obrigatório  | falso |
| Valor padrão | 6     |
| Tipo         | Int32 |

[Voltar à visão geral da referência do runbook](/pt/automacao/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/pt/automacao/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.
