> 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

Garantir que os membros de um grupo de segurança são proprietários dos Teams mapeados e dos respetivos Shared Channels.

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

### Descrição

Os Teams Shared Channels não herdam a propriedade da sua equipa pai. Este runbook agendado resolve essa lacuna: para cada equipa nomeada num mapeamento, garante que os membros de um grupo de segurança mapeado são proprietários da equipa e de cada canal partilhado que a equipa hospeda. O mapeamento de nome da equipa para grupo proprietário é mantido centralmente como uma configuração da organização RealmJoin. O runbook é apenas de adição - os proprietários e membros existentes nunca são removidos - por isso os canais partilhados recém-criados são simplesmente apanhados na próxima execução. Opcionalmente, pode enviar um relatório por e-mail e/ou carregar os ficheiros do relatório como um link de download. O parâmetro ReportFileFormat controla que formatos de ficheiro do relatório são gerados e entregues (apenas CSV, CSV e XLSX, ou apenas XLSX). Quando os anexos CSV excedem o limite de tamanho do e-mail e "CSV e XLSX" é selecionado, o e-mail recorre apenas ao livro de Excel. Consulte a documentação anexa para as regras de mapeamento e configuração.

### Como funciona

Em cada execução, o runbook:

1. Lê o mapeamento de nome da equipa para grupo proprietário a partir da definição da organização `SharedChannelOwners.Mapping`.
2. Para cada entrada, procura a equipa pelo seu **nome de exibição exato**.
3. Expande o grupo proprietário dessa entrada para os seus **utilizador** membros transitivos (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 **hospedado** canal partilhado da equipa.

O runbook é **apenas de adição**: nunca rebaixa nem remove proprietários ou membros existentes. Os canais partilhados recém-criados são, portanto, apanhados automaticamente na próxima execução agendada, sem perturbar nada que já esteja em vigor.

#### Configuração do mapeamento

O mapeamento fica centralmente nas definições da organização RealmJoin (Runbook Customization → `Configurações` → `SharedChannelOwners.Mapping`) para que seja mantido uma vez e partilhado por cada agendamento. É uma lista de `{ TeamName, OwnerGroupId }` objetos, onde `TeamName` é o **nome de exibição exato da equipa** (veja 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 seja como uma matriz estruturada (forma de subconfiguração recomendada) ou como uma cadeia JSON e normaliza ambos.

#### Correspondência de equipa

Cada entrada de mapeamento tem como alvo uma equipa nomeada explicitamente:

* Uma equipa é correspondida pelo seu **nome de exibição exato** (sensível a maiúsculas/minúsculas, consistente com Microsoft Graph; os espaços em branco ao redor do nome configurado são ignorados). Apenas essa equipa é processada - não há comportamento de prefixo nem de caráteres universais, por isso nomear uma entrada `EXT Service A` nunca afeta `EXT Service A Backup` ou semelhante.
* Os nomes de exibição não têm garantia de serem exclusivos em Entra ID. Se várias equipas partilharem o nome configurado, o grupo proprietário é aplicado a **todas** elas. Se nenhuma equipa corresponder, a entrada é reportada como *não encontrada* e ignorada.

#### Seleção de equipa

Para cada `TeamName` configurado, o runbook executa uma consulta Graph `displayName eq '...'` e mantém apenas os grupos Microsoft 365 que estão provisionados como uma **Equipe**.

#### O que é alterado

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

#### Execução de teste

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

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

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

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

#### 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 entram e saem.

### Branding do e-mail

O e-mail do relatório respeita a configuração opcional `RJReport.Branding.*` do Tenant:

* **Imagem de cabeçalho e rodapé** – URLs públicas HTTPS, PNG/JPEG/GIF, máx. 200 KB cada
* **Ligação do rodapé** – destino da imagem de rodapé
* **Cor de acento e texto** – valores hexadecimais de 6 dígitos, por exemplo `#0052cc`

Quando estas definições não estão configuradas, são usados os gráficos e cores padrão do RealmJoin. Uma imagem que não possa ser descarregada ou validada, ou um valor de cor inválido, nunca impede o e-mail do relatório – em vez disso, é usado o padrão correspondente.

Instruções de configuração e requisitos de imagem: [Branding do e-mail](https://docs.realmjoin.com/automation/runbooks/runbook-report-settings#email-branding-optional).

### 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 (Runbook Customization -> Settings) como uma subconfiguração estruturada em "SharedChannelOwners.Mapping". Cada entrada nomeia uma equipa pelo seu nome de exibição exato. O parâmetro oculto TeamOwnerGroupMapping é injetado a partir dele 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 da 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 por meio de /groups/{id}/owners/$ref*
  * GroupMember.ReadWrite.All
    * *Lê os membros transitivos do grupo proprietário e adiciona os utilizadores primeiro como membros da equipa*
  * Channel.ReadBasic.All
    * *Lista /teams/{id}/channels para encontrar os canais partilhados a processar*
  * ChannelMember.ReadWrite.All
    * *Lê os membros do canal e adiciona utilizadores ou promove-os a proprietário de canal partilhado*
  * 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ê as propriedades do utilizador membro (UPN, userType) via transitiveMembers para filtrar convidados*
  * Organization.Read.All *(opcional — funcionalidade: relatório por e-mail)*
    * *Lê o nome de exibição do locatário para o e-mail do relatório*

### Parâmetros

#### TeamOwnerGroupMapping

Mapeamento de um nome de exibição exato da equipa para um object id de grupo de segurança 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 seja como o objeto/matriz desserializado(a) (subconfigurações estruturadas) ou como uma cadeia JSON e normaliza ambos.

| Propriedade       | Valor  |
| ----------------- | ------ |
| Obrigatório       | falso  |
| Valor predefinido | \[]    |
| Tipo              | Objeto |

#### IncludeTeamOwners

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

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

#### WhatIfMode

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

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

#### SendEmailReport

Quando ativado, é enviado um relatório de e-mail com a marca RealmJoin via 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 nos formatos de ficheiro do relatório selecionados.

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

#### EmailTo

Endereço(s) de e-mail dos destinatários para o relatório (separados por vírgulas). Só é usado quando SendEmailReport está ativado.

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### EmailFrom

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

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### 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 vazio, é usada a imagem de cabeçalho padrão do RealmJoin.

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### 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 vazio, é usada a imagem de rodapé padrão do RealmJoin.

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### BrandingFooterLink

URL opcional para a qual a imagem de rodapé aponta. Obtida da configuração do Tenant RJReport.Branding.FooterLink. Quando vazio, é usada a ligação padrão (<https://www.realmjoin.com>).

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### BrandingAccentColor

Substituição opcional da cor de acento (hex de 6 dígitos, por exemplo '#0052cc') para o modelo de e-mail do relatório. Obtida da configuração do Tenant RJReport.Branding.AccentColor. Quando vazio ou inválido, é usada a cor de acento padrão do RealmJoin.

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### BrandingTextColor

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

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### ReportFileFormat

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

| Propriedade       | Valor      |
| ----------------- | ---------- |
| Obrigatório       | falso      |
| Valor predefinido | CSV e XLSX |
| Tipo              | Texto      |

#### CreateDownloadLink

Quando ativado, o(s) ficheiro(s) do relatório são carregados para uma conta de armazenamento e são devolvidas ligações de download com tempo limitado (e incluídas no relatório por e-mail se isso também estiver ativado). Desativado por padrão.

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

#### ContainerName

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

| Propriedade       | Valor                 |
| ----------------- | --------------------- |
| Obrigatório       | falso                 |
| Valor predefinido | shared-channel-owners |
| Tipo              | Texto                 |

#### ResourceGroupName

Grupo de recursos que contém a conta de armazenamento. Associado a "RJReport.StorageAccount.ResourceGroup".

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### StorageAccountName

Conta de armazenamento usada para o carregamento. Associada a "RJReport.StorageAccount.StorageAccountName".

| Propriedade       | Valor |
| ----------------- | ----- |
| Obrigatório       | falso |
| Valor predefinido |       |
| Tipo              | Texto |

#### LinkExpiryDays

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

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