> 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).

# Sincronização agendada de proprietários de Shared Channel

### Descrição

Os Canais Partilhados do Teams não herdam a propriedade da sua equipa-mãe. Este runbook agendado fecha essa lacuna: para cada equipa indicada num mapeamento, garante que os membros de um grupo de segurança mapeado são proprietários da equipa e de cada canal partilhado alojado pela equipa. O mapeamento do nome da equipa para o grupo de proprietários é mantido centralmente como uma definição da organização do RealmJoin. O runbook é apenas de adição - os proprietários e membros existentes nunca são removidos - pelo que os canais partilhados criados recentemente são simplesmente detetados na execução seguinte. Opcionalmente, pode enviar um relatório por e-mail e/ou carregar os ficheiros do relatório como uma ligação de transferência. O parâmetro ReportFileFormat controla quais os formatos de ficheiro de relatório gerados e entregues (apenas CSV, CSV e XLSX, ou apenas XLSX). Quando os anexos CSV excedem o limite de tamanho do e-mail e é selecionado "CSV & XLSX", o e-mail recorre apenas ao livro de trabalho do Excel. Consulte a documentação acompanhante 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 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 membros transitivos **utilizador** membros (os convidados são ignorados - não podem pertencer a um canal partilhado).
4. Garante que esses utilizadores são proprietários da equipa e de cada **alojado** canal partilhado da equipa.

O runbook é **apenas de adição**: nunca rebaixa nem remove proprietários ou membros existentes. Assim, os canais partilhados recém-criados são detetados automaticamente na execução agendada seguinte, sem perturbar o que já está em vigor.

#### Configuração do mapeamento

O mapeamento reside centralmente nas definições da organização do RealmJoin (Personalização do Runbook → `Definições` → `SharedChannelOwners.Mapping`) para ser 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* para um exemplo pronto a usar). O parâmetro oculto `TeamOwnerGroupMapping` é injetado a partir desta definição; o runbook aceita-o quer como um array estruturado (forma de subdefinição recomendada) quer como uma string JSON e normaliza ambos.

#### Correspondência de equipas

Cada entrada do mapeamento tem como destino 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; o espaço em branco circundante no nome configurado é ignorado). Apenas essa equipa é processada - não há comportamento de prefixo nem de wildcard, pelo que dar um nome a 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 **todas** elas. Se nenhuma equipa corresponder, a entrada é reportada como *não encontrada* e ignorada.

#### Seleção de equipas

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

#### O que é alterado

* **Equipa (opcional, `IncludeTeamOwners`, ativado por defeito):** os utilizadores do grupo de proprietários são adicionados como proprietários e membros do grupo M365 principal. A pertença à equipa é também o pré-requisito técnico para se tornar proprietário de um canal partilhado, pelo que este passo viabiliza o passo do canal.
* **Canais partilhados:** para cada canal partilhado alojado (`membershipType eq 'shared'`), garante-se que cada utilizador do grupo de proprietários é proprietário do canal **proprietário** - adicionado diretamente se estiver ausente, ou promovido se já for membro. Se a adição direta como proprietário for rejeitada (por exemplo, atraso na replicação da pertença), o runbook recorre a adicionar primeiro o utilizador como membro e depois a promovê-lo.

#### Execução em modo de teste

Defina **`WhatIfMode`** para registar o que seria alterado sem escrever nada. Neste modo, o runbook apresenta antecipadamente as equipas que processaria (com o respetivo grupo de proprietários) e quaisquer nomes de equipas 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 definição `RJReport.EmailSender` .
* **`CreateDownloadLink`** carrega os mesmos CSVs para uma Storage Account e devolve ligações de download SAS limitadas no tempo (também incorporadas 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 o armazenamento autentica-se com a identidade gerida da conta de Automação; essa identidade precisa da função Storage Blob Data Contributor do RBAC na Storage Account de destino (esta é uma atribuição de Azure RBAC, não uma permissão de aplicação do Graph). **Storage Blob Data Contributor** RBAC

#### Agendamento

Concebido para ser executado sem supervisão num agendamento. Como a configuração é centralizada nas definições da organização e o runbook é apenas de adição e idempotente, um único agendamento recorrente mantém todas as equipas mapeadas e os respetivos canais partilhados sincronizados à medida que pessoas e canais vão entrando e saindo.

### Localização

Organização → Geral → Sincronizar proprietários de canais partilhados (Agendado)

**Nome completo do runbook**

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

### Permissões

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

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

### Parâmetros

#### TeamOwnerGroupMapping

Mapeamento de um nome de apresentação exato da equipa para um identificador de objeto de um grupo de segurança de proprietários, 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/array desserializado (subdefinições estruturadas) quer como uma string JSON e normaliza ambos.

| Propriedade       | Valor  |
| ----------------- | ------ |
| Obrigatório       | false  |
| Valor predefinido | \[]    |
| 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 M365). A pertença à equipa é também o pré-requisito para a propriedade do canal.

| Propriedade       | Valor      |
| ----------------- | ---------- |
| Obrigatório       | false      |
| Valor predefinido | Verdadeiro |
| Tipo              | Booleano   |

#### WhatIfMode

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

| Propriedade       | Valor    |
| ----------------- | -------- |
| Obrigatório       | false    |
| Valor predefinido | Falso    |
| Tipo              | Booleano |

#### SendEmailReport

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

| Propriedade       | Valor    |
| ----------------- | -------- |
| Obrigatório       | false    |
| Valor predefinido | Falso    |
| Tipo              | Booleano |

#### EmailTo

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

| Propriedade       | Valor  |
| ----------------- | ------ |
| Obrigatório       | false  |
| Valor predefinido |        |
| Tipo              | String |

#### EmailFrom

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

| Propriedade       | Valor  |
| ----------------- | ------ |
| Obrigatório       | false  |
| Valor predefinido |        |
| Tipo              | String |

#### ReportFileFormat

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

| Propriedade       | Valor      |
| ----------------- | ---------- |
| Obrigatório       | false      |
| Valor predefinido | CSV & XLSX |
| Tipo              | String     |

#### CreateDownloadLink

Quando ativado, o(s) ficheiro(s) do relatório são carregados para uma Storage Account e são devolvidas ligações de download limitadas no tempo (e incluídas no relatório por e-mail, se essa opção também estiver ativada). Desativado por predefinição.

| Propriedade       | Valor    |
| ----------------- | -------- |
| Obrigatório       | false    |
| Valor predefinido | Falso    |
| Tipo              | Booleano |

#### ContainerName

Contentor de armazenamento usado para o carregamento. Configurado por runbook (não é uma definição global do RJReport).

| Propriedade       | Valor                 |
| ----------------- | --------------------- |
| Obrigatório       | false                 |
| Valor predefinido | shared-channel-owners |
| Tipo              | String                |

#### ResourceGroupName

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

| Propriedade       | Valor  |
| ----------------- | ------ |
| Obrigatório       | false  |
| Valor predefinido |        |
| Tipo              | String |

#### StorageAccountName

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

| Propriedade       | Valor  |
| ----------------- | ------ |
| Obrigatório       | false  |
| Valor predefinido |        |
| Tipo              | String |

#### LinkExpiryDays

Dias até expirar a ligação de download gerada. Associado a "RJReport.StorageAccount.LinkExpiryDays".

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | false |
| Valor predefinido | 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.
