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

# Sincronizar proprietários do Shared Channel agendado

Tornar os membros de um grupo proprietários das equipas e Shared Channel mapeados

{% 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/automatizacao/runbooks/scheduling.md) para obter detalhes sobre como configurar os agendamentos do runbook.
{% endhint %}

### Descrição

Os Shared Channel não herdam os owners da sua equipa. Para cada equipa nomeada no mapeamento, os membros do Security Group mapeado tornam-se owners da equipa e de cada Shared Channel que hospeda. Só adiciona, nunca remove; os novos Shared Channel são apanhados na próxima execução. Uma execução de teste mostra as alterações sem as aplicar. O relatório pode ser enviado por email ou disponibilizado através de uma ligação de download.

### Como funciona

Em cada execução, o runbook:

1. Lê o mapeamento do nome da equipa para o grupo de owners 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 owners dessa entrada para os seus **utilizadores** membros transitivos (os convidados são ignorados - não podem pertencer a um Shared Channel).
4. Garante que esses utilizadores são owners da equipa e de todos os **hospedados** Shared Channel da equipa.

O runbook é **apenas de adição**: nunca rebaixa nem remove owners ou membros existentes. Assim, os Shared Channel recém-criados são apanhados automaticamente na próxima execução agendada, sem perturbar nada já existente.

#### Configuração do mapeamento

O mapeamento vive centralmente nas definições da organização do RealmJoin (Runbook Customization → `Definições` → `SharedChannelOwners.Mapping`) e é mantido uma vez e partilhado por cada agendamento. É uma lista de `{ TeamName, OwnerGroupId }` objetos, onde `TeamName` é o **nome de apresentação exato da equipa**. O `TeamOwnerGroupMapping` parâmetro oculto é 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 ambos.

Exemplo pronto a usar para as definições da organização:

```json
{
    "Settings": {
        "SharedChannelOwners": {
            "Mapping": [
                { "TeamName": "EXT Service A", "OwnerGroupId": "11111111-1111-1111-1111-111111111111" },
                { "TeamName": "EXT Service B", "OwnerGroupId": "22222222-2222-2222-2222-222222222222" }
            ]
        }
    }
}
```

#### Correspondência da equipa

Cada entrada de mapeamento aponta para 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 o Microsoft Graph; os espaços em branco circundantes no nome configurado são ignorados). Só essa equipa é processada - não há 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 unicidade em Entra ID. Se várias equipas partilharem o nome configurado, o grupo de owners é aplicado a **todos** todas elas. Se nenhuma equipa corresponder, a entrada é reportada como *não encontrada* e ignorada.

#### Seleção da equipa

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

#### O que é alterado

* **Team (opcional, `IncludeTeamOwners`, por predefinição ativo):** os utilizadores do grupo de owners são adicionados como owners e membros do grupo Microsoft 365 pai. A pertença à equipa também é o pré-requisito técnico para se tornar owner de um Shared Channel, pelo que este passo ativa o passo do canal.
* **Canais partilhados:** para cada Shared Channel hospedado (`membershipType eq 'shared'`), é garantido que cada utilizador do grupo de owners seja um **owner** - adicionado diretamente, se estiver ausente, ou promovido, se já for membro. Se uma adição direta de owner for recusada (por exemplo, por atraso na replicação da pertença), o runbook recorre a adicionar primeiro o utilizador como membro e depois promovê-lo.

#### Execução de teste

Selecione **Execução de teste?** para registar o que mudaria sem escrever nada. Cada execução imprime, logo no início, as equipas que irá processar (com o respetivo grupo de owners) e quaisquer nomes de equipa configurados que não foram encontrados; numa execução de teste, as alterações são listadas como alterações planeadas.

#### Agendamento

Concebido para correr sem supervisão numa agenda. Como a configuração é 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 sincronizados à medida que pessoas e canais entram e saem.

### Entrega do relatório

Cada execução escreve os respetivos resultados no separador Output Data do portal RealmJoin: um resumo, as alterações efetuadas (ou planeadas numa execução de teste), as equipas e utilizadores ignorados com o respetivo motivo (equipa não encontrada, grupo de owners vazio, utilizadores convidados, alterações falhadas) e as atribuições de owners que já estavam em vigor. Cada tabela pode ser exportada para Excel aí.

Os ficheiros do relatório só são gerados quando um método de entrega é selecionado através da **Entrega do relatório** opção (email e/ou ligação de download): um resumo por equipa e uma lista detalhada por alteração, como ficheiros CSV e/ou um livro Excel. Com *Apenas dados de saída* selecionado, os resultados são lidos diretamente no separador Output Data. A entrega por email e a geração de ligação de download são independentes e podem ser combinadas; quando ambas são selecionadas, as ligações de download também são incorporadas no email.

Para a ligação de transferência, os ficheiros do relatório são carregados para a Storage Account do Azure configurada nas `RJReport.StorageAccount.*` definições de Tenant, e são devolvidos links de download SAS com prazo limitado. O carregamento para o armazenamento autentica-se com a identidade gerida da conta de Automação; essa identidade precisa da **Leitor e acesso aos dados** função RBAC na Storage Account de destino (isto é uma atribuição de Azure RBAC, não uma permissão de aplicação do Graph).

As agendas guardadas com as etiquetas de entrega anteriores (por exemplo *Relatório por e-mail*) mantêm a respetiva entrega. Quando uma dessas agendas é aberta para edição, a opção mostra *Apenas dados de saída* embora a entrega guardada permaneça ativa; selecione novamente a entrega antes de guardar para que a caixa de diálogo corresponda ao que a agenda faz.

### Configuração relativa ao envio de emails

O envio de um relatório por email é opcional e só acontece quando *Enviar também o relatório por email* ou *Enviar também email e ligação de transferência* é selecionado como entrega do relatório; é então necessário um destinatário. O email com a marca RealmJoin (enviado através de `Send-RjRbReportEmail`) contém as estatísticas da execução e os ficheiros do relatório como anexos. O endereço do remetente é obtido de `RJReport.EmailSender` Tenant.

Este runbook envia emails utilizando a API do Microsoft Graph. Para enviar emails através da Graph API, é necessário configurar um endereço de email existente na personalização do runbook.

Consulte a [documentação das definições de relatório do RealmJoin](https://docs.realmjoin.com/automation/runbooks/runbook-report-settings) para obter detalhes sobre todas as definições disponíveis.

#### Branding do email

O email do relatório respeita as definições opcionais de `RJReport.Branding.*` do Tenant:

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

Quando estas definições não estão configuradas, são usadas as imagens e cores predefinidas de RealmJoin. Uma imagem que não possa ser transferida ou validada, ou um valor de cor inválido, nunca impede o email do relatório - em vez disso, é usada a predefinição correspondente.

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

### Localização

Organization → General → Sync Shared Channel Owners (Scheduled)

**Nome completo do Runbook**

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

### Detalhes

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

### Permissões

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

* **Tipo**: Microsoft Graph
  * 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 owner de Shared Channel*
  * Group.ReadWrite.All
    * *Lista as equipas, lê os nomes do grupo de owners e os owners do grupo e adiciona os owners em falta da equipa através de /groups/{id}/owners/$ref*
  * GroupMember.ReadWrite.All
    * *Lê os membros transitivos do grupo de owners e adiciona primeiro os utilizadores como membros da equipa*
  * User.Read.All
    * *Lê propriedades do utilizador membro (UPN, userType) através de transitiveMembers para filtrar convidados*
  * Mail.Send *(opcional — funcionalidade: Relatório por email)*
    * *Envia o email do relatório de sincronização através de Send-RjRbReportEmail quando a entrega por email é selecionada*
  * Organization.Read.All *(opcional — funcionalidade: Relatório por email)*
    * *Lê o nome de apresentação do locatário para o email do relatório*

#### Notas de permissão

Azure Storage Account: função 'Leitor e acesso aos dados' para a identidade gerida da conta de Automação na Storage Account de destino - o carregamento obtém as chaves da conta através de listKeys (necessário apenas para as opções de ligação de transferência)

### Parâmetros

#### TeamOwnerGroupMapping

Lista de nomes de equipa com o Security Group cujos membros se tornam owners. Retirado da definição do Tenant SharedChannelOwners.Mapping.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido | \[]                                                    |
| Tipo              | Objeto                                                 |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### IncludeTeamOwners

Também torna os membros do grupo owners e membros da própria equipa, o que é necessário para serem owners dos respetivos canais.

| Propriedade                | Valor                              |
| -------------------------- | ---------------------------------- |
| Obrigatório                | falso                              |
| Valor predefinido          | Verdadeiro                         |
| Tipo                       | Booleano                           |
| Nome de exibição do portal | Também torná-los owners da equipa? |

#### WhatIfMode

Apenas regista o que mudaria sem escrever nada.

| Propriedade                | Valor              |
| -------------------------- | ------------------ |
| Obrigatório                | falso              |
| Valor predefinido          | Falso              |
| Tipo                       | Booleano           |
| Nome de exibição do portal | Execução de teste? |

#### SendEmailReport

Envia o relatório para o endereço de email do destinatário.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido | Falso                                                  |
| Tipo              | Booleano                                               |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### EmailTo

Enviar o relatório para estes endereços. Separe vários com vírgulas; cada destinatário recebe um email separado.

| Propriedade                | Valor                                                  |
| -------------------------- | ------------------------------------------------------ |
| Obrigatório                | falso                                                  |
| Valor predefinido          |                                                        |
| Tipo                       | Cadeia de caracteres                                   |
| Nome de exibição do portal | Endereço(s) de email do(s) destinatário(s)             |
| Oculto no portal           | sim (predefinido através da personalização do runbook) |

#### EmailFrom

Endereço do remetente do email do relatório. Obtido da definição do Tenant RJReport.EmailSender.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido |                                                        |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### BrandingHeaderImageUrl

Imagem de cabeçalho do email do relatório (URL HTTPS, PNG/JPEG/GIF, máx. 200 KB). Obtida da definição do Tenant RJReport.Branding.HeaderImageUrl; é utilizado o cabeçalho predefinido do RealmJoin quando estiver vazio.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido |                                                        |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### BrandingFooterImageUrl

Imagem de rodapé do email do relatório (URL HTTPS, PNG/JPEG/GIF, máx. 200 KB). Obtida da definição do Tenant RJReport.Branding.FooterImageUrl; é utilizado o rodapé predefinido do RealmJoin quando estiver vazio.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido |                                                        |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### BrandingFooterLink

Ligação por trás da imagem de rodapé do email do relatório. Obtida da definição do Tenant RJReport.Branding.FooterLink; realmjoin.com é utilizado quando estiver vazio.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido |                                                        |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### BrandingAccentColor

Cor de destaque do email do relatório como um valor hexadecimal de 6 dígitos. Obtida da definição do Tenant RJReport.Branding.AccentColor; é utilizado o valor predefinido do RealmJoin quando estiver vazio ou inválido.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido |                                                        |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### BrandingTextColor

Cor do texto do email do relatório como um valor hexadecimal de 6 dígitos. Obtida da definição do Tenant RJReport.Branding.TextColor; é utilizado o valor predefinido do RealmJoin quando estiver vazio ou inválido.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido |                                                        |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### ReportFileFormat

Entregar o relatório como CSV, como uma pasta de trabalho do Excel ou ambos.

| Propriedade                | Valor                                                  |
| -------------------------- | ------------------------------------------------------ |
| Obrigatório                | falso                                                  |
| Valor predefinido          | CSV e XLSX                                             |
| Tipo                       | Cadeia de caracteres                                   |
| Nome de exibição do portal | Formato do ficheiro do relatório                       |
| Oculto no portal           | sim (predefinido através da personalização do runbook) |

**Opções do portal**

| Opção do portal | Valor       |
| --------------- | ----------- |
| CSV e XLSX      | CSV e XLSX  |
| Apenas CSV      | Apenas CSV  |
| Apenas XLSX     | Apenas XLSX |

#### CreateDownloadLink

Também carregue o relatório e devolva uma ligação de download que expira após alguns dias.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido | Falso                                                  |
| Tipo              | Booleano                                               |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### ContainerName

Contentor de armazenamento para o qual os ficheiros do relatório são carregados. Definir por runbook.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido | shared-channel-owners                                  |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### ResourceGroupName

Grupo de recursos da conta de armazenamento para carregamentos do relatório. Obtido a partir da definição de tenant RJReport.StorageAccount.ResourceGroup.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido |                                                        |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### StorageAccountName

Conta de armazenamento para carregamentos do relatório. Obtida a partir da definição de tenant RJReport.StorageAccount.StorageAccountName.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido |                                                        |
| Tipo              | Cadeia de caracteres                                   |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

#### LinkExpiryDays

Número de dias que uma ligação de download permanece válida. Obtido a partir da definição de tenant RJReport.StorageAccount.LinkExpiryDays.

| Propriedade       | Valor                                                  |
| ----------------- | ------------------------------------------------------ |
| Obrigatório       | falso                                                  |
| Valor predefinido | 6                                                      |
| Tipo              | Int32                                                  |
| Oculto no portal  | sim (predefinido através da personalização do runbook) |

[Voltar à visão geral da referência do Runbook](/pt/automatizacao/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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.realmjoin.com/pt/automatizacao/runbooks/runbook-references/org/general/sync-shared-channel-owners_scheduled.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
