{"id":900278,"date":"2026-10-14T16:50:24","date_gmt":"2026-10-14T16:50:24","guid":{"rendered":"https:\/\/www.ninjaone.com\/blog\/comprobaciones-graph-api-licencias-caducadas\/"},"modified":"2026-10-14T16:50:25","modified_gmt":"2026-10-14T16:50:25","slug":"comprobaciones-graph-api-licencias-caducadas","status":"publish","type":"post","link":"https:\/\/www.ninjaone.com\/es\/blog\/comprobaciones-graph-api-licencias-caducadas\/","title":{"rendered":"C\u00f3mo programar comprobaciones con Graph API para licencias caducadas y usuarios inactivos"},"content":{"rendered":"<p>Las licencias de Microsoft 365 sin usar vac\u00edan el presupuesto en silencio, mientras que las cuentas inactivas de <a href=\"https:\/\/www.ninjaone.com\/es\/blog\/azure-ad-active-directory\/\">Azure AD<\/a> suponen un riesgo de seguridad real. Evita elementos innecesarios en tu dominio automatizando las comprobaciones con <strong>Graph API de Microsoft para identificar licencias caducadas<\/strong> y usuarios inactivos.<\/p>\n<p>En esta gu\u00eda te ayudamos a programar comprobaciones cr\u00edticas con PowerShell para cerrar vulnerabilidades y escalar en varios clientes.<\/p>\n<p><em>Si prefieres una explicaci\u00f3n visual r\u00e1pida, mira nuestra gu\u00eda en v\u00eddeo sobre <a href=\"https:\/\/www.ninjaone.com\/videos\/msp-growth\/how-to-run-scheduled-graph-api-checks-for-expired-licenses-and-inactive-users\/\">c\u00f3mo programar comprobaciones con Graph API para licencias caducadas y usuarios inactivos<\/a>.<\/em><\/p>\n<h2>C\u00f3mo programar comprobaciones de Graph API con PowerShell paso a paso<\/h2>\n<p>Automatiza las comprobaciones de Graph API para recuperar licencias desperdiciadas, proteger cuentas inactivas, cumplir con la normativa y simplificar la gesti\u00f3n de inquilinos, todo de una sola pasada.<\/p>\n<p>\ud83d\udccc <strong>Caso de uso: <\/strong>aplica este m\u00e9todo durante las revisiones mensuales de costes, las auditor\u00edas de seguridad o antes de renovar licencias. Es ideal para MSP que quieren recuperar licencias caducadas de Office 365 o reforzar la seguridad despu\u00e9s de dar de baja a empleados. Tambi\u00e9n te ayuda a detectar usuarios inactivos antes de que se conviertan en vulnerabilidades para tu sistema.<\/p>\n<p>\ud83d\udccc <strong>Requisitos previos:<\/strong> antes de empezar con el procedimiento, aseg\u00farate de contar con lo siguiente:<\/p>\n<ul>\n<li><strong>Permisos administrativos: <\/strong>comprueba que tu cuenta tenga el rol de Administrador global o Lector de informes en Azure AD.<\/li>\n<li><strong>Herramientas:<\/strong> Microsoft Graph PowerShell SDK (m\u00f3dulo Microsoft.Graph) y PowerShell 7+.<\/li>\n<li><strong>Configuraci\u00f3n de Azure:<\/strong> aseg\u00farate de que tu aplicaci\u00f3n de Azure AD tenga los permisos User.Read.All, LicenseAssignment.ReadWrite.All y AuditLog.Read.All para la automatizaci\u00f3n.<\/li>\n<li><strong>Opcional pero recomendable:<\/strong> descarga e instala una herramienta RMM como NinjaOne para programar scripts, supervisar los resultados y escalar entre inquilinos.<\/li>\n<\/ul>\n<p>Te recomendamos revisar \u26a0\ufe0f <a href=\"#things-to-look-out-for\"><em>Aspectos que debes tener en cuenta<\/em><\/a> antes de continuar.<\/p>\n<h3>Paso 1: instala y autentica el SDK de Microsoft Graph<\/h3>\n<p>Prepara tus herramientas para automatizar las comprobaciones de licencias y usuarios. Al instalar el SDK de Graph para consultar datos de Azure AD (que el administrador suele ocultar), vinculas tu script a la API de Microsoft mediante autenticaci\u00f3n.<\/p>\n<p>Procedimiento paso a paso:<\/p>\n<ol>\n<li>Instala el SDK ejecutando este script en <strong>PowerShell (Admin) <\/strong>o <strong>Windows Terminal (Admin)<\/strong>:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Install-Module Microsoft.Graph -Scope CurrentUser -Force<\/code><\/strong><\/p>\n<ol start=\"2\">\n<li>Autent\u00edcate con este script:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Connect-MgGraph -Scopes \"User.Read.All\", \"Reports.Read.All\", \"Directory.Read.All\"<\/code><\/strong><\/p>\n<p>Tambi\u00e9n puedes configurar una aplicaci\u00f3n registrada con un secreto de cliente y usar el flujo de certificado o de credenciales de cliente para una ejecuci\u00f3n desatendida.<\/p>\n<p>Una vez autenticado el SDK de Graph, en los siguientes pasos podr\u00e1s consultar los usuarios inactivos de Azure AD y las licencias caducadas de Office 365.<\/p>\n<h3>Paso 2: consulta los usuarios con licencias caducadas o sin asignar<\/h3>\n<p>Este paso te ayudar\u00e1 a descubrir licencias caducadas y cuentas inactivas que suponen un riesgo de seguridad y costes innecesarios.<\/p>\n<p>Procedimiento paso a paso:<\/p>\n<ol>\n<li>En <strong>PowerShell (Admin)<\/strong>, ejecuta este script para comprobar las licencias sin asignar a nivel de inquilino:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Get-MgSubscribedSku |<\/code><\/strong><br \/>\n<strong><code>Select-Object SkuPartNumber,<\/code><\/strong><br \/>\n<strong><code>@{Name=\"TotalLicenses\"; Expression={$_.PrepaidUnits.Enabled}},<\/code><\/strong><br \/>\n<strong><code>@{Name=\"UsedLicenses\"; Expression={$_.ConsumedUnits}},<\/code><\/strong><br \/>\n<strong><code>@{Name=\"Available\"; Expression={$_.PrepaidUnits.Enabled - $_.ConsumedUnits}} |<\/code><\/strong><br \/>\n<strong><code>Format-Table -AutoSize<\/code><\/strong><\/p>\n<ol start=\"2\">\n<li>Ejecuta este script para encontrar usuarios sin licencia:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Get-MgUser -Filter \"assignedLicenses\/`$count eq 0\" `<\/code><\/strong><br \/>\n<strong><code>-ConsistencyLevel eventual `<\/code><\/strong><br \/>\n<strong><code>-CountVariable unlicensedCount `<\/code><\/strong><br \/>\n<strong><code>-All |<\/code><\/strong><br \/>\n<strong><code>Select-Object DisplayName, UserPrincipalName |<\/code><\/strong><br \/>\n<strong><code>Export-Csv -Path \"UnlicensedUsers.csv\" -NoTypeInformation<\/code><\/strong><\/p>\n<ol start=\"3\">\n<li>Ejecuta este script para encontrar usuarios inactivos con licencia:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>$daysInactive = 90<\/code><\/strong><br \/>\n<strong><code>$cutoffDate = (Get-Date).AddDays(-$daysInactive)# Get licensed inactive users<\/code><\/strong><br \/>\n<strong><code>Get-MgUser -All -Property \"DisplayName,UserPrincipalName,SignInActivity,AssignedLicenses\" |<\/code><\/strong><br \/>\n<strong><code>Where-Object {<\/code><\/strong><br \/>\n<strong><code>($_.SignInActivity.LastSignInDateTime -lt $cutoffDate) -and<\/code><\/strong><br \/>\n<strong><code>($_.AssignedLicenses.Count -gt 0)<\/code><\/strong><br \/>\n<strong><code>} |<\/code><\/strong><br \/>\n<strong><code>Select-Object DisplayName,<\/code><\/strong><br \/>\n<strong><code>UserPrincipalName,<\/code><\/strong><br \/>\n<strong><code>@{Name=\"LastSignIn\"; Expression={$_.SignInActivity.LastSignInDateTime}} |<\/code><\/strong><br \/>\n<strong><code>Export-Csv -Path \"InactiveLicensedUsers.csv\" -NoTypeInformation<\/code><\/strong><\/p>\n<p>\u26a0\ufe0f <strong>Importante:<\/strong> ten en cuenta que SignInActivity requiere Azure AD Premium P1\/P2. Evita tambi\u00e9n los endpoints beta en los scripts de producci\u00f3n.<\/p>\n<p>Despu\u00e9s de ejecutar estos scripts, tendr\u00e1s dos archivos CSV: UnlicensedUsers.csv, con los usuarios que necesitan que se les asigne una licencia, e InactiveLicensedUsers.csv, que enumera las cuentas que representan un riesgo de seguridad.<\/p>\n<h3>Paso 3: exporta y registra los resultados de la auditor\u00eda<\/h3>\n<p>Una vez que tengas la lista de licencias caducadas y sin asignar, convierte esos datos en informaci\u00f3n accionable con informes automatizados. Exportar estos datos crea registros de auditor\u00eda permanentes que sirven como prueba de cumplimiento, y la automatizaci\u00f3n garantiza que detectes los problemas antes de que salgan caros.<\/p>\n<p>Procedimiento paso a paso:<\/p>\n<ol>\n<li>En <strong>PowerShell (Admin)<\/strong>, ejecuta este script para exportar a un CSV con marca de tiempo:\n<ul>\n<li>Script para generar un nombre de archivo con marca de tiempo:<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p style=\"padding-left: 80px;\"><strong><code>$timestamp = Get-Date -Format \"yyyyMMdd-HHmm\"<\/code><\/strong><br \/>\n<strong><code>$reportPath = \"C:\\Audits\\LicenseReport_$timestamp.csv\"<\/code><\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Exporta los usuarios inactivos con licencia:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p style=\"padding-left: 80px;\"><strong><code>$inactiveUsers | Export-Csv -Path $reportPath -NoTypeInformation<\/code><\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Esto generar\u00e1 archivos CSV que se pueden abrir en cualquier programa, y la marca de tiempo crea registros con versiones para el cumplimiento.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ol start=\"2\">\n<li>(Opcional): ejecuta este script para enviar los informes por correo electr\u00f3nico:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Send-MailMessage -From \"audit@yourcompany.com\" -To \"admin@client.com\" `<\/code><\/strong><br \/>\n<strong><code>-Subject \"ACTION REQUIRED: $($inactiveUsers.Count) Inactive Licensed Users\" `<\/code><\/strong><br \/>\n<strong><code>-Body \"Attached: Users with licenses but no sign-ins for 90+ days\" `<\/code><\/strong><br \/>\n<strong><code>-Attachments $reportPath -SmtpServer \"smtp.office365.com\" -Port 587 `<\/code><\/strong><br \/>\n<strong><code>-Credential (Get-Credential)<\/code><\/strong><\/p>\n<ol start=\"3\">\n<li>Ejecuta este script para automatizarlo por completo con la aplicaci\u00f3n de Azure AD:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>$tenantId = \"YOUR_TENANT_ID\"<\/code><\/strong><br \/>\n<strong><code>$clientId = \"YOUR_CLIENT_ID\"<\/code><\/strong><br \/>\n<strong><code>$clientSecret = \"YOUR_SECRET\" | ConvertTo-SecureString -AsPlainText -ForceConnect-MgGraph -TenantId $tenantId -ClientId $clientId -ClientSecret $clientSecret<\/code><\/strong><\/p>\n<p>\ud83d\udca1 <strong>Consejo:<\/strong> guarda los secretos en Azure Key Vault. Nunca los incluyas directamente en el c\u00f3digo.<\/p>\n<p>Despu\u00e9s de ejecutar estos scripts, tendr\u00e1s informes CSV con marca de tiempo guardados localmente y, opcionalmente, alertas por correo electr\u00f3nico enviadas al instante a las partes interesadas. Estos archivos te permiten programar ejecuciones autom\u00e1ticas mediante el Programador de tareas o herramientas RMM como NinjaOne para garantizar una supervisi\u00f3n continua.<\/p>\n<h3>Paso 4: automatiza con el Programador de tareas o una pol\u00edtica de RMM<\/h3>\n<p>Programas el script una vez y deja que se ejecute cada mes, cada a\u00f1o o de forma indefinida, con lo que consigues una supervisi\u00f3n proactiva sin mover un dedo. Hacer revisiones peri\u00f3dicas te ayuda a detectar incidencias antes de que causen problemas. Hay dos opciones para conseguirlo:<\/p>\n<h4>Opci\u00f3n 1: con el Programador de tareas (un solo equipo)<\/h4>\n<p>Procedimiento paso a paso:<\/p>\n<ol>\n<li>Abre el <strong>S\u00edmbolo del sistema (Admin)<\/strong> y ejecuta este comando:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>schtasks \/create \/tn \"M365LicenseAudit\" \/tr `<\/code><\/strong><br \/>\n<strong><code>\"powershell.exe -ExecutionPolicy Bypass -File C:\\Scripts\\LicenseAudit.ps1\" `<\/code><\/strong><br \/>\n<strong><code>\/sc weekly \/d MON \/st 02:00 \/ru \"NT AUTHORITY\\SYSTEM\"<\/code><\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Funciona porque se ejecuta como cuenta del sistema incluso cuando no hay ning\u00fan usuario con la sesi\u00f3n iniciada.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>Opci\u00f3n 2: con herramientas RMM<\/h4>\n<p>Procedimiento paso a paso:<\/p>\n<ol>\n<li>Abre tu herramienta RMM preferida, como NinjaOne.<\/li>\n<li>Crea el script (el de la Opci\u00f3n 1) y gu\u00e1rdalo en la biblioteca de scripts de NinjaOne.<\/li>\n<li>Asigna el script al grupo de pol\u00edticas de clientes de Microsoft 365.<\/li>\n<li>Configura los resultados:\n<ul>\n<li>Guarda los CSV en <strong>\\\\ClientShare\\Audits<\/strong>.<\/li>\n<li>S\u00fabelos al panel del RMM para consultarlos de forma centralizada.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Una vez programado, el script se ejecutar\u00e1 en la fecha y hora asignadas, guardar\u00e1 autom\u00e1ticamente los informes en las carpetas designadas y mostrar\u00e1 las tendencias entre inquilinos.<\/p>\n<h2 id=\"things-to-look-out-for\">\u26a0\ufe0f Aspectos que debes tener en cuenta<\/h2>\n<p>En esta secci\u00f3n destacamos los posibles retos que conviene tener presentes mientras sigues esta gu\u00eda.<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Riesgos<\/strong><\/td>\n<td><strong>Posibles consecuencias<\/strong><\/td>\n<td><strong>Soluciones<\/strong><\/td>\n<\/tr>\n<tr>\n<td>1. Faltan datos en los informes<\/td>\n<td>Auditor\u00edas incompletas, riesgos sin detectar<\/td>\n<td>Comprueba los permisos: ejecuta <strong><code>Get-MgContext<\/code><\/strong> para verificar \u00e1mbitos como User.Read.All.<\/p>\n<p>Evita los bloqueos de MFA: usa autenticaci\u00f3n con certificado en lugar de secretos.<\/td>\n<\/tr>\n<tr>\n<td>2. El script falla sin avisar<\/td>\n<td>Falsa sensaci\u00f3n de seguridad, brechas de cumplimiento<\/td>\n<td>Activa el registro<strong>:<\/strong> a\u00f1ade <strong><code>Start-Transcript -Path C:\\Logs\\Audit.log<\/code><\/strong> a los scripts.<\/p>\n<p>Supervisa el Visor de eventos: consulta en <strong>Registros de aplicaciones y servicios &gt; PowerShell<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>3. No se marcan usuarios<\/td>\n<td>Se pasan por alto licencias caducadas o cuentas inactivas<\/td>\n<td>Valida los umbrales: confirma que <strong>$cutoffDate<\/strong> coincide con la pol\u00edtica.<\/p>\n<p>Verifica los campos de licencia: usa <strong><code>Get-MgUser -UserId user@domain.com -Property AssignedLicenses<\/code><\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>4. Secretos escritos en el c\u00f3digo<\/td>\n<td>Inquilino comprometido, robo de credenciales<\/td>\n<td>Rota los secretos de inmediato en Azure AD.<\/p>\n<p>Migra a Azure Key Vault: usa <strong><code>Get-AzKeyVaultSecret<\/code><\/strong> para recuperarlos de forma segura.<\/td>\n<\/tr>\n<tr>\n<td>5. Dependencia de la API beta<\/td>\n<td>El script deja de funcionar tras las actualizaciones de Microsoft<\/td>\n<td>Sustituye los endpoints beta: usa <strong><code>Get-MgUser<\/code><\/strong> (v1.0) en lugar de <strong>Get-MgBetaUser<\/strong>.<\/p>\n<p>Suscr\u00edbete al changelog de Microsoft Graph.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Claves para unas auditor\u00edas con Graph API y PowerShell a prueba de balas<\/h2>\n<p>Ajusta estos par\u00e1metros a tu entorno. La precisi\u00f3n evita falsas alarmas y mantiene los flujos de trabajo fluidos.<\/p>\n<h3>Exclusiones en los informes<\/h3>\n<p>Excluye de los an\u00e1lisis de inactividad las cuentas de servicio, los buzones compartidos y las cuentas de emergencia. As\u00ed evitas recuperar por error licencias de recursos cr\u00edticos. Puedes usar filtros de PowerShell para incluirlas en una lista de permitidos con este script:<\/p>\n<p><strong><code>$excludedUPNs = @(\"backup@domain.com\", \"admin@domain.com\")<\/code><\/strong><br \/>\n<strong><code>Get-MgUser | Where-Object { $_.UserPrincipalName -notin $excludedUPNs }<\/code><\/strong><\/p>\n<h3>Umbrales de inactividad<\/h3>\n<p>Define los umbrales seg\u00fan tu tolerancia al riesgo. Si una cuenta lleva 90 d\u00edas inactiva, el riesgo es bajo; 60 d\u00edas es un riesgo medio, y 30 d\u00edas, un riesgo alto. Seg\u00fan el nivel de riesgo, act\u00faa enviando correos de aviso, revocando sus licencias o desactivando la cuenta para despu\u00e9s recuperarla. As\u00ed te proteges frente a posibles incidencias.<\/p>\n<h3>Frecuencia de las auditor\u00edas<\/h3>\n<p>Planifica bien el momento de tus auditor\u00edas para evitar riesgos de seguridad y otros problemas. Para la mayor\u00eda de las empresas se recomienda hacer comprobaciones mensuales que coincidan con los ciclos de facturaci\u00f3n.<\/p>\n<p>En sectores con mucha rotaci\u00f3n, las comprobaciones semanales permiten que los informes sigan el ritmo de los cambios del entorno. Tambi\u00e9n deber\u00edas lanzar la auditor\u00eda de inmediato cada vez que un empleado deje la empresa.<\/p>\n<h3>Asignaci\u00f3n de acciones<\/h3>\n<p>Crea procedimientos (SOP) que activen autom\u00e1ticamente los siguientes pasos. Ejecuta estos scripts para recuperar licencias y desactivar cuentas:<\/p>\n<ul>\n<li>Para recuperar licencias:<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\"><strong><code>Set-MgUserLicense -UserId \"user@domain.com\" -RemoveLicenses @(\"skuId\")<\/code><\/strong><\/p>\n<ul>\n<li>Para desactivar cuentas:<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\"><strong><code>Update-MgUser -UserId \"user@domain.com\" -AccountEnabled:$false<\/code><\/strong><\/p>\n<p>Despu\u00e9s de ejecutar estos scripts, archiva los datos. Env\u00edalos al responsable o a SharePoint mediante Graph API.<\/p>\n<h2>C\u00f3mo NinjaOne simplifica tus auditor\u00edas de licencias<\/h2>\n<p>Convierte las comprobaciones de Graph API de tareas manuales en motores de cumplimiento totalmente automatizados y multiinquilino.<\/p>\n<ul>\n<li><strong>Despliegue centralizado de scripts:<\/strong> env\u00eda tus scripts de PowerShell con Graph API a m\u00e1s de 100 endpoints o inquilinos en una sola acci\u00f3n.<\/li>\n<li><strong>Supervisi\u00f3n autom\u00e1tica de resultados: <\/strong>haz seguimiento de los informes y registros CSV de todos tus clientes. Las alertas se disparan al instante si los archivos no se actualizan.<\/li>\n<li><strong>Alertas de fallo en tus herramientas:<\/strong> recibe notificaciones en Slack, Teams o por correo electr\u00f3nico cuando un script falle.<\/li>\n<li><strong>Informes unificados entre inquilinos:<\/strong> unifica los datos de licencias caducadas de Office 365 y de usuarios inactivos en un \u00fanico panel ejecutivo.<\/li>\n<li><strong>Remediaci\u00f3n autom\u00e1tica:<\/strong> crea tickets autom\u00e1ticamente en tu herramienta PSA con SOP predefinidos para detectar licencias caducadas.<\/li>\n<\/ul>\n<h2>Controla costes y seguridad con las comprobaciones de licencias de Graph API<\/h2>\n<p>Automatizar las auditor\u00edas de licencias y usuarios transforma la supervisi\u00f3n reactiva en un control proactivo. Al recuperar licencias sin usar y desactivar cuentas inactivas, evitas fugas en la facturaci\u00f3n y cierras vectores de ataque. Aplica el procedimiento anterior para convertir las licencias sin usar en ahorro presupuestario y las cuentas obsoletas en cumplimiento.<\/p>\n<div class=\"quick-start-guide\"><h2><svg width=\"45\" height=\"45\" viewBox=\"0 0 45 45\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M41.4822 0H3.51778C1.57496 0 0 1.57496 0 3.51778V41.4822C0 43.425 1.57496 45 3.51778 45H41.4822C43.425 45 45 43.425 45 41.4822V3.51778C45 1.57496 43.425 0 41.4822 0Z\" fill=\"#053856\"\/>\n<path d=\"M30.4399 13.9904C28.9161 12.4475 26.9127 11.6737 24.4346 11.6737C23.0721 11.6737 21.8188 11.911 20.6794 12.3858C19.5401 12.8605 18.5859 13.5346 17.8168 14.4129V11.2654L12.2766 13.867V32.562H18.0779V22.4739C18.0779 20.6224 18.5099 19.2267 19.3787 18.2867C20.2474 17.3515 21.4105 16.8815 22.8727 16.8815C24.1877 16.8815 25.1894 17.285 25.8825 18.0968C26.5756 18.9086 26.9222 20.1334 26.9222 21.7808V32.562H32.7234V21.2728C32.7234 18.2393 31.9591 15.5285 30.4399 13.9856V13.9904Z\" fill=\"#04FF88\"\/>\n<\/svg>Gu\u00eda de inicio r\u00e1pido<\/h2><p>NinjaOne te ayuda a programar comprobaciones con Graph API para licencias caducadas y usuarios inactivos. La <a href=\"https:\/\/www.ninjaone.com\/es\/plataforma\/\">plataforma NinjaOne<\/a> ofrece herramientas y orientaci\u00f3n para:<\/p>\n<ul>\n<li><b>Auditar licencias caducadas<\/b>: usa Graph API para identificar las licencias que han superado su fecha de caducidad<\/li>\n<li><b>Comprobar usuarios inactivos<\/b>: detecta a los usuarios que no han iniciado sesi\u00f3n ni usado los servicios en un periodo determinado<\/li>\n<li><b>Automatizar estas comprobaciones<\/b>: configura tareas programadas para ejecutar estas auditor\u00edas con regularidad<\/li>\n<\/ul>\n<\/div>\n<p><strong>Temas relacionados<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/www.ninjaone.com\/es\/blog\/buenas-practicas-seguridad-de-api\/\">8 buenas pr\u00e1cticas para proteger las API<\/a><\/li>\n<li><a href=\"https:\/\/www.ninjaone.com\/es\/script-hub\/detectar-cuentas-de-usuario-inactivas-en-linux\/\">C\u00f3mo alertar sobre cuentas de usuario inactivas en Linux: gu\u00eda completa de scripts<\/a><\/li>\n<li><a href=\"https:\/\/www.ninjaone.com\/es\/script-hub\/cuentas-de-usuario-inactivas-con-powershell\/\">Automatiza la detecci\u00f3n de cuentas de usuario inactivas con PowerShell<\/a><\/li>\n<li><a href=\"https:\/\/www.ninjaone.com\/es\/script-hub\/cuentas-locales-no-utilizadas-windows\/\">Identificar y gestionar cuentas locales sin usar en sistemas Windows<\/a><\/li>\n<li><a href=\"https:\/\/www.ninjaone.com\/es\/script-hub\/deshabilitar-cuentas-de-usuario\/\">Gu\u00eda completa para desactivar cuentas de usuario en Linux dirigida a profesionales de TI<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Las licencias de Microsoft 365 sin usar vac\u00edan el presupuesto en silencio, mientras que las cuentas inactivas de Azure AD suponen un riesgo de seguridad real. Evita elementos innecesarios en tu dominio automatizando las comprobaciones con Graph API de Microsoft para identificar licencias caducadas y usuarios inactivos. En esta gu\u00eda te ayudamos a programar comprobaciones [&hellip;]<\/p>\n","protected":false},"author":35,"featured_media":539759,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[4357],"tags":[],"class_list":["post-900278","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-operaciones-de-ti"],"acf":[],"modified_by":null,"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/posts\/900278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/comments?post=900278"}],"version-history":[{"count":1,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/posts\/900278\/revisions"}],"predecessor-version":[{"id":900279,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/posts\/900278\/revisions\/900279"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media\/539759"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media?parent=900278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/categories?post=900278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/tags?post=900278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}