# Informe programado de asignación de licencias

### Descripción

Este runbook comprueba la disponibilidad de licencias según los SKUs transmitidos y envía un informe por correo electrónico si se alcanza algún umbral. Se pueden configurar dos tipos de umbrales. El primer tipo es un umbral mínimo, que activa una alerta cuando el número de licencias disponibles cae por debajo de un número especificado. El segundo tipo es un umbral máximo, que activa una alerta cuando el número de licencias disponibles supera un número especificado. El informe incluye información detallada sobre las licencias que están fuera de los umbrales configurados, las exporta a archivos CSV y las envía por correo electrónico.

### Personalización del Runbook

#### Configuración relacionada con el envío de correos electrónicos

Este runbook envía correos electrónicos mediante la API de Microsoft Graph. Para enviar correos electrónicos a través de la API Graph, debe configurar una dirección de correo electrónico existente en la personalización del runbook.

Este proceso se describe en detalle en la [Configuración de informes por correo electrónico](https://github.com/realmjoin/realmjoin-runbooks/tree/master/docs/general/setup-email-reporting.md) documentación.

#### Configuración de InputJson

Cada configuración de licencia requiere:

* **SKUPartNumber** (obligatorio): identificador de SKU de Microsoft
* **FriendlyName** (obligatorio): nombre para mostrar
* **MinThreshold** (opcional): alerta cuando las licencias disponibles < umbral
* **MaxThreshold** (opcional): alerta cuando las licencias disponibles > umbral

Debe establecerse al menos un umbral por licencia.

#### Ejemplos de configuración

**Solo umbral mínimo** (evitar escasez):

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

**Solo umbral máximo** (evitar sobreaprovisionamiento):

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

**Ambos umbrales** (mantener el rango):

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

#### Personalización completa del Runbook

```json
{
    "Settings": {
        "RJReport": {
            "EmailSender": "sender@contoso.com"
        }
    },
    "Runbooks": {
        "rjgit-org_general_report-license-assignment_scheduled": {
            "Parameters": {
                "EmailTo": {
                    "DisplayName": "Dirección o direcciones de correo electrónico del destinatario"
                },
                "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
                }
            }
        }
    }
}
```

### Búsqueda de números de parte de SKU

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

SKUs comunes:

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

### Salida

**Cuando se detectan infracciones:**

* Salida de consola en el registro del trabajo
* Exportación CSV (`License_Threshold_Violations.csv`)
* Informe por correo electrónico con resumen, infracciones, recomendaciones y archivo adjunto CSV

**Cuando todo está dentro de los umbrales:**

* No se envía ningún correo electrónico
* El trabajo finaliza correctamente

### Solución de problemas

**SKU no encontrado**: Verifique que el SKU exista usando `Get-MgSubscribedSku`

**Correo electrónico no enviado**: Revise la configuración de EmailFrom y el permiso Mail.Send

**JSON no válido**: Valide el formato JSON antes de la configuración

### Nota de migración

Herencia `WarningThreshold` se asigna automáticamente a `MinThreshold` - las configuraciones antiguas siguen funcionando.

### Ubicación

Organization → General → Report License Assignment (Scheduled)

**Nombre completo del runbook**

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

### Permisos

#### Permisos de aplicación

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

### Parámetros

#### InputJson

Matriz JSON que contiene configuraciones de SKU con umbrales. Cada entrada debe incluir un SKUPartNumber para el identificador de SKU de Microsoft, un FriendlyName como nombre para mostrar de la licencia, un MinThreshold opcional que especifique el número mínimo de licencias que deben estar disponibles y un MaxThreshold opcional que especifique el número máximo de licencias que deben estar disponibles.

Esto debe configurarse en la personalización del runbook

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | true   |
| Valor predeterminado |        |
| Tipo                 | Objeto |

#### EmailTo

Dirección de correo electrónico del destinatario o lista de destinatarios separada por comas.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | true   |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### EmailFrom

Dirección de correo electrónico del remitente resuelta a partir de la configuración.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

[Volver a la vista general de referencia de Runbook](https://docs.realmjoin.com/es/automatizacion/runbooks/runbook-references)
