> 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/es/automatizacion/runbooks/runbook-references/org/general/report-license-assignment_scheduled.md).

# Informe programado de asignación de licencias

### Descripción

Este runbook comprueba la disponibilidad de licencias en función de los SKU 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 desencadena 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 desencadena 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/o Excel (xlsx) y las envía por correo electrónico. Los archivos del informe también se pueden cargar en un Azure Storage Account, devolviendo vínculos de descarga con tiempo limitado. El parámetro ReportFileFormat controla qué formatos de archivo se generan y entregan (solo CSV, CSV y XLSX, o solo XLSX). Cuando el archivo adjunto CSV supera el límite de tamaño del correo electrónico y "CSV & XLSX" se selecciona, el correo electrónico se limita solo al libro de Excel.

### Personalización del runbook

#### Configuración del envío de correos electrónicos

El envío de un informe por correo electrónico es opcional y solo ocurre cuando se proporciona un destinatario (`EmailTo`) se proporciona. La dirección del remitente se toma de la `RJReport.EmailSender` configuración del Tenant.

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

Consulte la [documentación de configuración de informes de RealmJoin](https://docs.realmjoin.com/automation/runbooks/runbook-report-settings) para obtener más detalles.

#### Configuración de InputJson

Cada configuración de licencia requiere:

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

Debe establecerse al menos un umbral por licencia.

#### Ejemplos de configuración

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

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

**Solo umbral máximo** (para evitar la sobreasignación):

```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(es) 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
                }
            }
        }
    }
}
```

### Cómo encontrar los números de parte de SKU

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

SKU 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 se completa correctamente

### Solución de problemas

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

**Correo electrónico no enviado**: Compruebe 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

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

### Ubicación

Organización → General → Informe de asignación de licencias (Programado)

**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 especifica el número mínimo de licencias que debe haber disponibles y un MaxThreshold opcional que especifica el número máximo de licencias que debe haber disponibles.

Esto debe configurarse en la personalización del runbook

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

#### ReportFileFormat

Controla qué formatos de archivo del informe se generan y entregan: "solo CSV", "CSV y XLSX" (predeterminado) o "solo XLSX".

| Propiedad            | Valor      |
| -------------------- | ---------- |
| Obligatorio          | false      |
| Valor predeterminado | CSV & XLSX |
| Tipo                 | Cadena     |

#### CreateDownloadLink

Si está habilitado, los archivos del informe se cargan en una Storage Account de Azure y se devuelven enlaces de descarga con tiempo limitado. Deshabilitado de forma predeterminada.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### ContainerName

Nombre del contenedor de almacenamiento utilizado para la carga. Configurado por runbook (no es una configuración global de RJReport).

| Propiedad            | Valor                     |
| -------------------- | ------------------------- |
| Obligatorio          | false                     |
| Valor predeterminado | report-license-assignment |
| Tipo                 | Cadena                    |

#### ResourceGroupName

Grupo de recursos que contiene la Storage Account. Obtenido de la configuración del Tenant de RJReport.

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

#### StorageAccountName

Nombre de la Storage Account utilizada para la carga. Obtenido de la configuración del Tenant de RJReport.

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

#### LinkExpiryDays

Número de días hasta que expire el enlace de descarga generado. Obtenido de la configuración del Tenant de RJReport.

| Propiedad            | Valor |
| -------------------- | ----- |
| Obligatorio          | false |
| Valor predeterminado | 6     |
| Tipo                 | Int32 |

#### EmailTo

Si se especifica, se enviará un correo electrónico con el informe a la(s) dirección(es) proporcionada(s). Puede ser una sola dirección o varias direcciones separadas por comas (cadena).

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| 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 al resumen de referencia del runbook](/es/automatizacion/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/es/automatizacion/runbooks/runbook-references/org/general/report-license-assignment_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.
