Baja de usuario completamente automatizada desde una lista de SharePoint. Deshabilita la cuenta en Active Directory, revoca sesiones en Microsoft 365, elimina grupos y licencias, convierte el buzon en compartido, y da de baja la licencia de GitHub Copilot.
El proceso arranca desde Power Automate (disparado por una lista de SharePoint) y delega en Azure Automation, que ejecuta los scripts en el servidor on-premises via Hybrid Worker.
Parametros que recibe UserOffboarding.ps1 desde Power Automate al crear el job de Azure Automation.
| Parametro | Tipo | Requerido | Descripcion |
|---|---|---|---|
UPN |
String | Si | User Principal Name del usuario a dar de baja (p.ej. [email protected]) |
EnableAutoReply |
String | Si | Activar respuesta automatica en el buzon. Valores: True / False |
MensajeAutoReply |
String | No | Cuerpo del mensaje de respuesta automatica. Solo se usa si EnableAutoReply es True |
JiraTicket |
String | No | Clave del ticket de Jira (p.ej. SIS-1234). Si se proporciona, el runbook publica un comentario con el resumen de acciones |
UserOffboarding.ps1 y no se pasa al script interno offboarding.ps1. Permite desacoplar la logica de Jira del script de baja.
El script offboarding.ps1 ejecuta estas acciones de forma secuencial. Cada resultado se refleja en el JSON de salida.
Comprueba si el usuario existe en Active Directory local. Si es cloud-only, omite los pasos de AD sin marcarlos como error.
Deshabilita la cuenta en Active Directory on-premises con Disable-ADAccount.
Genera una contrasena aleatoria segura y la asigna con Set-ADAccountPassword. Evita accesos no autorizados posteriores a la baja.
Elimina el usuario de todos los grupos de AD, excepto los definidos en ExcludedGroupIds de config.psd1 (p.ej. grupos de licencia base).
Mueve el objeto de usuario a la OU de Prebajas en AD para facilitar la gestion y auditoria del periodo posterior a la baja.
Establece AccountEnabled = false en Entra ID via Microsoft Graph. El usuario pierde acceso inmediato a todos los servicios de Microsoft 365.
Invalida todos los tokens de acceso y sesiones activas con Revoke-MgUserSignInSession. Complementa el bloqueo de cuenta.
Elimina el usuario de los grupos y equipos de Microsoft 365, excepto los excluidos. Incluye Teams, SharePoint, etc.
Convierte el buzon a tipo Shared para que otros usuarios puedan acceder sin licencia. Si EnableAutoReply es true, configura la respuesta automatica con el mensaje proporcionado.
Elimina todas las licencias asignadas al usuario en Microsoft 365 via Graph API. El buzon compartido no requiere licencia.
El wrapper ejecuta adicionalmente remove_license.ps1 para dar de baja la licencia de GitHub Copilot del usuario. El resultado se incluye en el JSON de salida.
El script consulta la GitHub Enterprise API via GraphQL para obtener la lista de usuarios con SAML vinculado. Busca el UPN del usuario en el campo samlNameId de forma paginada hasta encontrar la coincidencia.
idealista_copilotSi el usuario tiene cuenta de GitHub y pertenece al equipo idealista_copilot en la enterprise idgithub, se le elimina del equipo, revocando su acceso a la licencia de Copilot.
Si el usuario no tiene cuenta de GitHub vinculada, el script devuelve Found: false sin generar error. Si tiene cuenta pero no licencia Copilot, devuelve CopilotLicense.Found: false. Nunca afecta al campo success de la baja.
El token de GitHub Enterprise se centraliza en config.psd1 bajo la clave GitHub.Token. El wrapper lo lee y lo pasa como parametro -GitHubToken al script.
idealista_copilot → eliminado del equipo → copilotRemoved: true en el JSON de salida y comentario en Jira.
Si se pasa el parametro JiraTicket, el wrapper publica un comentario formateado en Jira con el resumen de todas las acciones realizadas.
Estado: ✓ COMPLETADO | o bien: ✗ COMPLETADO CON AVISOS
| Accion | Resultado |
|---|---|
| AD Deshabilitado | (/) |
| Contrasena reseteada | (/) |
| Grupos AD eliminados | 12 |
| Movido a Prebajas | (/) |
| M365 Sign-in bloqueado | (/) |
| Sesiones revocadas | (/) |
| Grupos M365 eliminados | 8 |
| Buzon compartido | (/) |
| Licencias eliminadas | (/) |
| GitHub Copilot | @jdoe — (/) |
success se pone a false solo si el proceso principal de baja (AD + M365) ha tenido errores. Los campos de GitHub (githubFound, copilotRemoved) son informativos y nunca marcan la baja como fallida.
JSON compacto que devuelve el runbook y que Power Automate parsea para construir la tarjeta adaptable en Teams y decidir si abrir un ticket de incidencia.
| Campo | Uso en Power Automate |
|---|---|
success |
Condicion para crear ticket de incidencia en Jira si es false |
upn |
Titulo de la tarjeta adaptable en Teams |
adGroupsRemoved, m365GroupsRemoved |
Mostrados como numeros en la tarjeta adaptable |
githubFound, copilotRemoved |
Seccion GitHub en la tarjeta adaptable; iconos segun estado |
jiraCommentPosted |
Confirmacion de que el ticket de Jira fue actualizado |
Todos los scripts estan en el repositorio jmfernandez (Bitbucket) y se sincronizan al servidor via git pull.
Wrapper de Azure Automation. Declara parametros, llama a offboarding.ps1 y remove_license.ps1, ensambla el JSON de salida y publica el comentario en Jira si procede.
Logica principal de baja: AD + M365. Recibe UPN y EnableAutoReply. Devuelve JSON con resultado detallado de las 10 acciones.
Script de baja de GitHub Copilot. Busca el usuario por SAML en la Enterprise de GitHub y lo elimina del equipo idealista_copilot.
Credenciales centralizadas: AzureAD (cert), Exchange Online, Jira (API token), GitHub Enterprise (token). No incluido en el repositorio publico.
Modulo compartido con el runbook de altas. Publica comentarios en Jira via REST API con autenticacion por API token.