Qué vas a conseguir
Que el service desk restablezca contraseñas y desbloquee cuentas de su OU sin ser administrador del dominio, que un usuario borrado por error vuelva con sus grupos en un minuto, y que cuando alguien pregunte "¿quién ha tocado esta cuenta?" tengas la respuesta en los registros de los controladores de dominio. Es el día a día de AD después del alta de usuarios.
Antes de empezar
- Una estructura de OU por sede o por tipo de objeto (
OU=Usuarios,OU=Madrid,OU=Equipos,OU=Madrid). Se delega sobre OU, no sobre usuarios sueltos. - Grupos de delegación creados: por ejemplo
GG-AD-Helpdesk-Madridpara restablecer y desbloquear,GG-AD-Altas-Madridpara crear usuarios. Se delega a grupos, nunca a personas. - El módulo ActiveDirectory de PowerShell (RSAT) y una cuenta con permisos de administración sobre esas OU.
- En Usuarios y equipos de Active Directory, Ver › Características avanzadas activado para ver la pestaña Seguridad.
1. Delegar con el asistente
El desbloqueo no está en las tareas comunes. Se añade con Crear una tarea personalizada para delegar › Solo los siguientes objetos de la carpeta › Objetos Usuario › Específicos de propiedad y se marcan Leer lockoutTime y Escribir lockoutTime.
Para que un grupo una equipos en la OU de equipos: tarea personalizada, Objetos Equipo, Crear los objetos seleccionados en esta carpeta (y Eliminar, si también da de baja), y después los permisos Restablecer contraseña, Escritura validada en el nombre de host DNS, Escritura validada en el nombre principal de servicio y Escribir restricciones de cuenta.
El asistente solo añade permisos; no sabe quitarlos. Para revisar o retirar una delegación, ve a Propiedades › Seguridad › Opciones avanzadas de la OU.
2. Lo mismo con dsacls y PowerShell
Para documentarlo en un cambio o repetirlo en otra sede, mejor por línea de comandos:
# Restablecer contraseña y forzar cambio en el siguiente inicio (solo objetos hijos de tipo usuario)dsacls "OU=Usuarios,OU=Madrid,DC=contoso,DC=local" /I:S /G "CONTOSO\GG-AD-Helpdesk-Madrid:CA;Reset Password;user"dsacls "OU=Usuarios,OU=Madrid,DC=contoso,DC=local" /I:S /G "CONTOSO\GG-AD-Helpdesk-Madrid:RPWP;pwdLastSet;user"# Desbloqueardsacls "OU=Usuarios,OU=Madrid,DC=contoso,DC=local" /I:S /G "CONTOSO\GG-AD-Helpdesk-Madrid:RPWP;lockoutTime;user"# Crear y borrar usuarios en la OU, y administrarlosdsacls "OU=Usuarios,OU=Madrid,DC=contoso,DC=local" /I:T /G "CONTOSO\GG-AD-Altas-Madrid:CCDC;user"dsacls "OU=Usuarios,OU=Madrid,DC=contoso,DC=local" /I:S /G "CONTOSO\GG-AD-Altas-Madrid:GA;;user"The command completed successfully/I:T aplica al objeto y a sus hijos, /I:S solo a los hijos. CA es un derecho extendido (Reset Password), RPWP leer y escribir una propiedad, CCDC crear y borrar hijos del tipo indicado, GA control total. Para grupos se usa CCDC;group y, para cambiar miembros, RPWP;member;group.
Para comprobar después qué tiene delegado un grupo, (Get-Acl "AD:\OU=Usuarios,OU=Madrid,DC=contoso,DC=local").Access lista cada permiso con su IdentityReference y su ObjectType.
Si el service desk no puede restablecer la contraseña de un usuario concreto, mira su atributo adminCount. Las cuentas que pertenecen o han pertenecido a grupos protegidos (Admins. del dominio, Operadores de cuentas…) reciben los permisos de AdminSDHolder y no heredan la delegación de la OU. Es intencionado.
3. La papelera de reciclaje de AD
Sin papelera, un usuario borrado se restaura desde una copia con restauración autoritativa. Con ella, se recupera con todos sus atributos y grupos. Requiere nivel funcional de bosque Windows Server 2008 R2 o superior y, una vez activada, no se puede desactivar.
Enable-ADOptionalFeature -Identity 'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target 'contoso.local'# Pide confirmación: la acción es irreversibleGet-ADOptionalFeature -Filter 'Name -like "Recycle*"' | Select-Object Name, EnabledScopesTambién se activa desde el Centro de administración de Active Directory: clic derecho en el dominio › Habilitar papelera de reciclaje.
Restaurar un usuario borrado:
Get-ADObject -Filter 'sAMAccountName -eq "lprado"' -IncludeDeletedObjects -Properties lastKnownParent, whenChanged | Select-Object Name, lastKnownParent, whenChangedName lastKnownParent whenChanged---- --------------- -----------Laura Prado DEL:5c1e9a0e-7a43-4f0b-9d2e-... OU=Usuarios,OU=Madrid,DC=contoso,DC=local 30/10/2026 9:14:02Get-ADObject -Filter 'sAMAccountName -eq "lprado"' -IncludeDeletedObjects | Restore-ADObjectGet-ADUser lprado -Properties MemberOf | Select-Object Enabled, @{n='Grupos';e={$_.MemberOf.Count}}- El objeto vuelve a su
lastKnownParent. Si esa OU también se borró, restaura primero la OU. - El plazo para recuperar es
msDS-deletedObjectLifetime, que por defecto toma el valor detombstoneLifetime(180 días en los bosques actuales).
4. ¿Quién ha borrado o cambiado este usuario?
Los controladores de dominio solo lo registran si la directiva de auditoría avanzada está activa. En la GPO de los controladores de dominio: Configuración del equipo › Directivas › Configuración de Windows › Configuración de seguridad › Configuración de directiva de auditoría avanzada › Directivas de auditoría:
- Administración de cuentas › Auditar la administración de cuentas de usuario: Correcto y Error.
- Acceso DS › Auditar cambios de servicio de directorio: Correcto. Además necesita una entrada de auditoría (SACL) en la OU o el dominio para "Todos" con escritura de propiedades y eliminación.
Los eventos que buscas en el registro de Seguridad:
| Evento | Qué significa |
|---|---|
| 4720 | Se creó una cuenta de usuario |
| 4726 | Se eliminó una cuenta de usuario |
| 4738 | Se cambió una cuenta de usuario (indica qué atributos, no los valores anteriores) |
| 4740 | Se bloqueó una cuenta (lo registra el DC con el rol de emulador de PDC) |
| 4767 | Se desbloqueó una cuenta |
| 5136 | Se modificó un objeto del directorio, con el valor anterior y el nuevo |
Cada evento se registra en el DC que hizo el cambio. Para no adivinar cuál, pregunta a todos:
$dcs = (Get-ADDomainController -Filter *).HostNameforeach ($dc in $dcs) { Get-WinEvent -ComputerName $dc -FilterHashtable @{LogName='Security'; Id=4726; StartTime=(Get-Date).AddDays(-2)} -ErrorAction SilentlyContinue | ForEach-Object { $d = @{}; ([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }; [pscustomobject]@{Hora=$_.TimeCreated; DC=$dc; Cuenta=$d.TargetUserName; Quien=$d.SubjectUserName} } }Hora DC Cuenta Quien---- -- ------ -----30/10/2026 9:14:02 dc02.contoso.local lprado adm-jgarciaPara un cambio de atributo, repadmin /showobjmeta te dice en qué DC se originó y cuándo, y ahí buscas el 5136:
repadmin /showobjmeta dc01 "CN=Laura Prado,OU=Usuarios,OU=Madrid,DC=contoso,DC=local" | findstr /i "department manager" 41822 Madrid\DC02 41822 2026-10-30 08:52:10 3 departmentEl registro de Seguridad de un DC se sobrescribe rápido. Aumenta su tamaño o reenvíalo a un SIEM: lo que no está guardado no se puede auditar.
5. MachineAccountQuota a cero
Por defecto, cualquier usuario autenticado puede unir hasta 10 equipos al dominio: lo marca el atributo ms-DS-MachineAccountQuota del dominio. Una vez delegada la unión de equipos a un grupo (apartado 1), ponlo a cero:
Get-ADObject (Get-ADDomain).DistinguishedName -Properties ms-DS-MachineAccountQuota | Select-Object ms-DS-MachineAccountQuotams-DS-MachineAccountQuota------------------------- 10Set-ADDomain -Identity contoso.local -Replace @{"ms-DS-MachineAccountQuota"="0"}Antes de cambiarlo, comprueba qué cuentas unen equipos hoy (técnicos, la secuencia de tareas de MECM, el conector de Intune para unión híbrida) y que todas tienen la delegación en su OU.
Siguientes pasos
- La guía Active Directory: usuarios y grupos cubre las altas, bajas y cuentas bloqueadas del día a día.
- La guía PowerShell ayuda a convertir estas consultas en scripts programados.
- El repositorio 19-ad-infra-health-check de mi GitHub revisa la salud de los controladores de dominio, y 37-iam-access-review sirve para revisar periódicamente quién tiene qué permisos.
¿Falta algo o en tu entorno es distinto? Escríbeme y lo corrijo.
What you'll get
The service desk resets passwords and unlocks accounts in its OU without being a domain admin, a user deleted by mistake comes back with their groups in a minute, and when someone asks "who touched this account?" you have the answer in the domain controllers' logs. It's day-to-day AD after creating users.
Before you start
- An OU structure by site or object type (
OU=Users,OU=Madrid,OU=Computers,OU=Madrid). You delegate on OUs, not on individual users. - Delegation groups created: for example
GG-AD-Helpdesk-Madridto reset and unlock,GG-AD-Joiners-Madridto create users. You delegate to groups, never to people. - The ActiveDirectory PowerShell module (RSAT) and an account with admin rights over those OUs.
- In Active Directory Users and Computers, View › Advanced Features turned on to see the Security tab.
1. Delegating with the wizard
Unlocking isn't among the common tasks. It's added with Create a custom task to delegate › Only the following objects in the folder › User objects › Property-specific, ticking Read lockoutTime and Write lockoutTime.
For a group to join computers in the computers OU: custom task, Computer objects, Create selected objects in this folder (and Delete, if it also removes them), then the permissions Reset password, Validated write to DNS host name, Validated write to service principal name and Write account restrictions.
The wizard only adds permissions; it can't remove them. To review or withdraw a delegation, go to the OU's Properties › Security › Advanced.
2. The same with dsacls and PowerShell
To document it in a change or repeat it on another site, the command line is better:
# Reset password and force change at next logon (child user objects only)dsacls "OU=Users,OU=Madrid,DC=contoso,DC=local" /I:S /G "CONTOSO\GG-AD-Helpdesk-Madrid:CA;Reset Password;user"dsacls "OU=Users,OU=Madrid,DC=contoso,DC=local" /I:S /G "CONTOSO\GG-AD-Helpdesk-Madrid:RPWP;pwdLastSet;user"# Unlockdsacls "OU=Users,OU=Madrid,DC=contoso,DC=local" /I:S /G "CONTOSO\GG-AD-Helpdesk-Madrid:RPWP;lockoutTime;user"# Create and delete users in the OU, and manage themdsacls "OU=Users,OU=Madrid,DC=contoso,DC=local" /I:T /G "CONTOSO\GG-AD-Joiners-Madrid:CCDC;user"dsacls "OU=Users,OU=Madrid,DC=contoso,DC=local" /I:S /G "CONTOSO\GG-AD-Joiners-Madrid:GA;;user"The command completed successfully/I:T applies to the object and its children, /I:S to children only. CA is an extended right (Reset Password), RPWP read and write a property, CCDC create and delete children of the given type, GA full control. For groups use CCDC;group and, to change members, RPWP;member;group.
To check later what a group has been delegated, (Get-Acl "AD:\OU=Users,OU=Madrid,DC=contoso,DC=local").Access lists each permission with its IdentityReference and ObjectType.
If the service desk can't reset a particular user's password, check their adminCount attribute. Accounts that are or were members of protected groups (Domain Admins, Account Operators…) get the AdminSDHolder permissions and don't inherit the OU delegation. That's by design.
3. The AD Recycle Bin
Without the Recycle Bin, a deleted user is restored from a backup with an authoritative restore. With it, the user comes back with all attributes and groups. It requires forest functional level Windows Server 2008 R2 or higher and, once enabled, it can't be disabled.
Enable-ADOptionalFeature -Identity 'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target 'contoso.local'# It asks for confirmation: the action is irreversibleGet-ADOptionalFeature -Filter 'Name -like "Recycle*"' | Select-Object Name, EnabledScopesIt can also be enabled from Active Directory Administrative Center: right-click the domain › Enable Recycle Bin.
Restoring a deleted user:
Get-ADObject -Filter 'sAMAccountName -eq "lprado"' -IncludeDeletedObjects -Properties lastKnownParent, whenChanged | Select-Object Name, lastKnownParent, whenChangedName lastKnownParent whenChanged---- --------------- -----------Laura Prado DEL:5c1e9a0e-7a43-4f0b-9d2e-... OU=Users,OU=Madrid,DC=contoso,DC=local 30/10/2026 9:14:02Get-ADObject -Filter 'sAMAccountName -eq "lprado"' -IncludeDeletedObjects | Restore-ADObjectGet-ADUser lprado -Properties MemberOf | Select-Object Enabled, @{n='Groups';e={$_.MemberOf.Count}}- The object returns to its
lastKnownParent. If that OU was also deleted, restore the OU first. - The window to recover is
msDS-deletedObjectLifetime, which by default takes the value oftombstoneLifetime(180 days in current forests).
4. Who deleted or changed this user?
Domain controllers only log it if advanced audit policy is on. In the domain controllers' GPO: Computer Configuration › Policies › Windows Settings › Security Settings › Advanced Audit Policy Configuration › Audit Policies:
- Account Management › Audit User Account Management: Success and Failure.
- DS Access › Audit Directory Service Changes: Success. It also needs an auditing entry (SACL) on the OU or domain for Everyone with write property and delete.
The events you look for in the Security log:
| Event | What it means |
|---|---|
| 4720 | A user account was created |
| 4726 | A user account was deleted |
| 4738 | A user account was changed (says which attributes, not the old values) |
| 4740 | An account was locked out (logged by the DC holding the PDC emulator role) |
| 4767 | An account was unlocked |
| 5136 | A directory object was modified, with the old and new value |
Each event is logged on the DC that made the change. To avoid guessing which, ask all of them:
$dcs = (Get-ADDomainController -Filter *).HostNameforeach ($dc in $dcs) { Get-WinEvent -ComputerName $dc -FilterHashtable @{LogName='Security'; Id=4726; StartTime=(Get-Date).AddDays(-2)} -ErrorAction SilentlyContinue | ForEach-Object { $d = @{}; ([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }; [pscustomobject]@{Time=$_.TimeCreated; DC=$dc; Account=$d.TargetUserName; Who=$d.SubjectUserName} } }Time DC Account Who---- -- ------- ---30/10/2026 9:14:02 dc02.contoso.local lprado adm-jgarciaFor an attribute change, repadmin /showobjmeta tells you which DC it originated on and when, and that's where you look for the 5136:
repadmin /showobjmeta dc01 "CN=Laura Prado,OU=Users,OU=Madrid,DC=contoso,DC=local" | findstr /i "department manager" 41822 Madrid\DC02 41822 2026-10-30 08:52:10 3 departmentA DC's Security log is overwritten quickly. Increase its size or forward it to a SIEM: what isn't kept can't be audited.
5. MachineAccountQuota to zero
By default, any authenticated user can join up to 10 computers to the domain: it's set by the domain's ms-DS-MachineAccountQuota attribute. Once computer joins are delegated to a group (section 1), set it to zero:
Get-ADObject (Get-ADDomain).DistinguishedName -Properties ms-DS-MachineAccountQuota | Select-Object ms-DS-MachineAccountQuotams-DS-MachineAccountQuota------------------------- 10Set-ADDomain -Identity contoso.local -Replace @{"ms-DS-MachineAccountQuota"="0"}Before changing it, check which accounts join computers today (technicians, the MECM task sequence, the Intune connector for hybrid join) and that all of them have the delegation on their OU.
Next steps
- The Active Directory: users and groups guide covers everyday joiners, leavers and locked accounts.
- The PowerShell guide helps turn these queries into scheduled scripts.
- The 19-ad-infra-health-check repository on my GitHub checks the health of the domain controllers, and 37-iam-access-review helps review regularly who holds which permissions.
Is something missing, or different in your environment? Get in touch and I'll fix it.
Tech Career Lab · newsletter
¿Te ha servido? Cada dos semanas envío una idea práctica para perfiles IT: LinkedIn, proyectos, networking y procesos de selección.Found this useful? Every two weeks I send one practical idea for IT professionals: LinkedIn, projects, networking and hiring processes.
Apúntate y llévate las 33 ideasSign up and get the 33 ideas →