# Relatório agendado de atribuição de licenças

### Descrição

Este runbook verifica a disponibilidade de licenças com base nos SKUs transmitidos e envia um relatório por email se algum limite for atingido. Dois tipos de limites podem ser configurados. O primeiro tipo é um limite mínimo, que aciona um alerta quando o número de licenças disponíveis fica abaixo de um número especificado. O segundo tipo é um limite máximo, que aciona um alerta quando o número de licenças disponíveis excede um número especificado. O relatório inclui informações detalhadas sobre as licenças que estão fora dos limites configurados, exporta-as para arquivos CSV e as envia por email.

### Personalização do Runbook

#### Configuração relacionada ao envio de e-mail

Este runbook envia e-mails usando a API do Microsoft Graph. Para enviar e-mails via API do Graph, você precisa configurar um endereço de e-mail existente na personalização do runbook.

Esse processo é descrito em detalhes na [Configuração de Relatórios por E-mail](https://github.com/realmjoin/realmjoin-runbooks/tree/master/docs/general/setup-email-reporting.md) documentação.

#### Configuração de InputJson

Cada configuração de licença requer:

* **SKUPartNumber** (obrigatório): identificador de SKU da Microsoft
* **FriendlyName** (obrigatório): nome de exibição
* **MinThreshold** (opcional): alerta quando as licenças disponíveis < limite
* **MaxThreshold** (opcional): alerta quando as licenças disponíveis > limite

Pelo menos um limite deve ser definido por licença.

#### Exemplos de Configuração

**Apenas limite mínimo** (evitar faltas):

```json
[
    {
        "SKUPartNumber": "ENTERPRISEPACK",
        "FriendlyName": "Microsoft 365 E3",
        "MinThreshold": 50
    }
]
```

**Apenas limite máximo** (evitar sobreprovisionamento):

```json
[
    {
        "SKUPartNumber": "POWER_BI_PRO",
        "FriendlyName": "Power BI Pro",
        "MaxThreshold": 500
    }
]
```

**Ambos os limites** (manter intervalo):

```json
[
    {
        "SKUPartNumber": "ENTERPRISEPREMIUM",
        "FriendlyName": "Microsoft 365 E5",
        "MinThreshold": 50,
        "MaxThreshold": 150
    }
]
```

#### Personalização Completa do Runbook

```json
{
    "Settings": {
        "RJReport": {
            "EmailSender": "sender@contoso.com"
        }
    },
    "Runbooks": {
        "rjgit-org_general_report-license-assignment_scheduled": {
            "Parameters": {
                "EmailTo": {
                    "DisplayName": "Endereço(s) de Email do Destinatário"
                },
                "InputJson": {
                    "Hide": true,
                    "DefaultValue": [
                        {
                            "SKUPartNumber": "SPE_E5",
                            "FriendlyName": "Microsoft 365 E5",
                            "MinThreshold": 20,
                            "MaxThreshold": 30
                        },
                        {
                            "SKUPartNumber": "FLOW_FREE",
                            "FriendlyName": "Microsoft Power Automate Free",
                            "MinThreshold": 10
                        }
                    ]
                },
                "EmailFrom": {
                    "Hide": true
                },
                "CallerName": {
                    "Hide": true
                }
            }
        }
    }
}
```

### Encontrando Números de Parte do SKU

```powershell
Connect-MgGraph -Scopes "Organization.Read.All"
Get-MgSubscribedSku | Select-Object SkuPartNumber, SkuId | Sort-Object SkuPartNumber
```

SKUs comuns:

* `ENTERPRISEPACK` - Microsoft 365 E3
* `ENTERPRISEPREMIUM` - Microsoft 365 E5
* `EMS` - Enterprise Mobility + Security E3

### Saída

**Quando violações detectadas:**

* Saída no console no log do trabalho
* Exportação CSV (`License_Threshold_Violations.csv`)
* Relatório por email com resumo, violações, recomendações e anexo CSV

**Quando tudo estiver dentro dos limites:**

* Nenhum email enviado
* O trabalho é concluído com sucesso

### Solução de problemas

**SKU Não Encontrado**: Verifique se o SKU existe usando `Get-MgSubscribedSku`

**Email Não Enviado**: Verifique a configuração de EmailFrom e a permissão Mail.Send

**JSON Inválido**: Valide o formato JSON antes da configuração

### Nota de Migração

Legado `WarningThreshold` mapeia automaticamente para `MinThreshold` - as configurações antigas continuam a funcionar.

### Localização

Organization → Geral → Report License Assignment (Agendado)

**Nome completo do Runbook**

rjgit-org\_general\_report-license-assignment\_scheduled

### Permissões

#### Permissões de aplicativo

* **Tipo**: Microsoft Graph
  * Organization.Read.All
  * User.Read.All
  * Mail.Send

### Parâmetros

#### InputJson

Matriz JSON contendo configurações de SKU com limites. Cada entrada deve incluir um SKUPartNumber para o identificador de SKU da Microsoft, um FriendlyName como nome de exibição da licença, um MinThreshold opcional especificando o número mínimo de licenças que deve estar disponível, e um MaxThreshold opcional especificando o número máximo de licenças que deve estar disponível.

Isto precisa ser configurado na personalização do runbook

| Propriedade  | Valor  |
| ------------ | ------ |
| Obrigatório  | true   |
| Valor padrão |        |
| Tipo         | Objeto |

#### EmailTo

Endereço de email do destinatário ou lista de destinatários separada por vírgulas.

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

#### EmailFrom

Endereço de email do remetente resolvido a partir das definições.

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

[Voltar para a visão geral da Referência de Runbook](/pt/automacao/runbooks/runbook-references.md)


---

# Agent Instructions: 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:

```
GET https://docs.realmjoin.com/pt/automacao/runbooks/runbook-references/org/general/report-license-assignment_scheduled.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
