1.7K
Consultas LDAP se puede utilizar para buscar diferentes objetos según determinados criterios (equipos, usuarios, grupos) en la base de datos LDAP de Active Directory. Para realizar una consulta LDAP en el catálogo LDAP de AD, puede usar varias utilidades (por ejemplo, ldapsearch en Windows), secuencias de comandos de PowerShell o VBS, la función Consultas guardadas en el complemento MMC Usuarios y equipos de Active Directory, etc.
En este artículo, veremos algunos ejemplos útiles de consultas LDAP a AD y cómo ejecutarlas.
¿Cómo ejecutar la consulta LDAP?
Primero, veamos algunos ejemplos de ejecución de consultas LDAP (Protocolo ligero de acceso a directorios). Por ejemplo, desea realizar una consulta LDAP simple para buscar usuarios de Active Directory que tengan habilitada la opción «El usuario debe cambiar la contraseña en el próximo inicio de sesión». El código de filtro LDAP debe estar entre paréntesis(). El código para esta consulta LDAP es el siguiente:
(objectCategory=person)(objectClass=user)(pwdLastSet=0)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)
Intentemos ejecutar esta consulta LDAP usando el complemento AD.
- Abra la consola ADUC y vaya a la Consultas guardadas sección;
- Crear una nueva consulta: Nuevo > Consulta;
- Especifique un nombre para la nueva consulta guardada. Haga clic en el Definir consulta botón;
- Selecciona el Búsqueda personalizada tipo. Ve a la Avanzado y copie su código de consulta LDAP en el Introducir consulta LDAP campo;
- Haga clic en Aceptar dos veces. Seleccione su nueva consulta en el árbol de consultas guardadas de ADUC. Luego presione F5;
- Debería aparecer una lista de usuarios de AD que coincidan con esta consulta LDAP en el panel derecho.
También puede usar filtros LDAP al buscar objetos en la consola ADSI Edit.
- Para agregar un filtro LDAP, haga clic en el contexto de nomenclatura seleccionado (NC). Luego seleccione Nuevo > Consulta del menú;
- Establecer el nombre de la consulta;
- Seleccione el área de búsqueda (Raíz de búsqueda). En el Cadena de consulta campo especifique el código de su filtro LDAP. Además, aquí puede seleccionar la profundidad de la búsqueda subárbol o Un nivel.
También puede usar el filtro de consulta LDAP en los siguientes cmdlets de PowerShell: Get-ADUser, Get-ADComputer, Get-ADGroup y Get-ADObject (estos cmdlets forman parte del módulo Active Directory de PowerShell). Cada uno de estos cmdlets tiene un parámetro LdapFilter, que se diseñó específicamente para usar filtros LDAP al buscar objetos en Active Directory.
Por ejemplo, ejecutaremos la consulta de búsqueda LDAP anterior usando Get-ADUser. Abra la consola powershell.exe y ejecute el comando:
Get-ADUser -LDAPFilter '(objectCategory=person)(objectClass=user)(pwdLastSet=0)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)'
Para buscar equipos, use el cmdlet Get-ADComputer:
Get-ADComputer –LDAPFilter ‘your ldap query’
Por ejemplo, desea buscar todas las computadoras de escritorio en Active Directory con ciertas versiones de Windows que no contienen las palabras clave SEMANAS y PRUEBA en sus nombres. Primero, creemos un filtro LDAP complejo con varios O condiciones:
$compLDAPFilter= "(&(|(operatingSystem=*Windows 7*)" $compLDAPFilter+= "(operatingSystem=*Windows 8*)" $compLDAPFilter += "(operatingSystem=*Windows 8.1*)" $compLDAPFilter += "(operatingSystem=*Windows 10*))" $compLDAPFilter += "(!name=*WKS*)(!name=*TEST*))"
Después de haber creado un filtro LDAP, se puede ejecutar a través de Get-ADComputer:
Get-ADComputer -LDAPFilter $compLDAPFilter -Property * | Select-Object Name, OperatingSystem, LastLogonDate
Para buscar un grupo de Active Directory en AD, use el cmdlet Get-ADGroup:
Get-ADGroup –LDAPFilter {LDAP_query}
Si no conoce el tipo de objeto de Active Directory que está buscando, puede usar el cmdlet genérico Get-ADObject:
Get-ADObject -LdapFilter "(cn=*Brion*)"
En este ejemplo, encontramos que el filtro LDAP proporcionado coincide con el usuario Jon Brion y el grupo BrionTeam.
Si necesita encontrar objetos de un tipo específico, puede especificar el tipo de objeto mediante el parámetro objectClass. Por ejemplo:
Get-ADObject -LdapFilter "(&(objectClass=user)(cn=*Brion*))"
Veamos otro ejemplo que le permite mostrar una lista de usuarios con membresía en un grupo específico en Active Directory. En este ejemplo, obtenemos una lista en el Administradores de dominio grupo, pero puede reemplazar el nombre del grupo con el Grupo CN quieres:
(Get-ADObject -LdapFilter “(&(objectclass=group)(CN=Domain Admins))”) | ForEach-Object {$a=$_.Name; Get-ADObject -LdapFilter “(&(objectclass=user)(MemberOf=$($_.DistinguishedName)))” | Select-Object DistinguishedName, Name, @{l=’GroupName’;e={$a}}}
Aquí hay otro ejemplo que le permite obtener una lista de computadoras en un grupo. Si se agregan cuentas de usuario al grupo, dicha consulta LDAP no las incluirá en los resultados de la búsqueda:
(Get-ADObject -LdapFilter “(&(objectclass=group)(CN=caManagerComputers))”) | ForEach-Object {$a=$_.Name; Get-ADObject -LdapFilter “(&(objectclass=computer)(MemberOf=$($_.DistinguishedName)))” | Select-Object DistinguishedName, Name, @{l=’GroupName’;e={$a}}}
Windows tiene varias herramientas integradas, como dsget y dsquery. Estas herramientas le permiten ejecutar consultas LDAP contra Active Directory,
La utilidad dsquery devuelve el nombre distinguido de un objeto que coincide con los parámetros especificados (para los filtros LDAP tiene un filtrar parámetro). Por ejemplo, para buscar todos los usuarios con cargos que comienzan con Gerente, ejecute el comando:
dsquery * OU=Employees,DC=theitbros,DC=com -filter "(&(objectCategory=person)(objectClass=user)(Title=Manager*))"
Puedes usar ANR (Resolución de nombres ambiguos) para buscar objetos en Active Directory. Esta característica de AD le permite usar filtros complejos que incluyen varios atributos asociados con los nombres:
- nombre para mostrar
- nombre dado (Nombre)
- sn (Apellido)
- nombre de cuenta sAMA
- heredadoExchangeDN
- Nombre Distinguido Relativo (RDN)
- direcciones proxy
- correo
- mailApodo
- msExchResourceSearchProperties
- msDS-AdditionalSamAccountName
- msDS-PhoneticCompanyName
- msDS-Departamento fonético
- msDS-PhoneticDisplayName
- msDS-PhoneticFirstName
- msDS-PhoneticLastName
Por ejemplo, para encontrar usuarios que contengan la palabra clave prueba en uno de estos atributos, basta con ejecutar esta consulta LDAP simple:
(anr=test)
Sintaxis del filtro LDAP
La forma de texto de los filtros de búsqueda LDAP se define en RFC 4515. La sintaxis de un filtro LDAP es:
<Filter>=(<Attribute><comparison operator><value>)
Los siguientes operadores de comparación se pueden utilizar en un filtro:
Operador | |
= | Igual |
>= | más o igual |
<= | menor o igual |
~= | Aproximadamente igual |
Por ejemplo, el siguiente filtro devuelve todos los objetos con valor de atributo cn (nombre común) Jon:
(cn=Jon)
Los filtros se pueden combinar usando operadores booleanos cuando hay múltiples condiciones de búsqueda:
Operador | |
& | Y — se deben cumplir todas las condiciones |
| | O — se puede cumplir cualquier número de condiciones |
! | NOT — la condición no debe cumplirse |
Por ejemplo, seleccionemos objetos AD con cn igual a Jon y sn (apellido) igual a Brion:
(&(cn=Jon)(sn=Brion))
Puede usar varios operadores lógicos en un filtro a la vez, lo principal es no confundirse entre paréntesis. Compongamos un filtro que devolverá objetos con cn igual a Jon o sn igual a Brion, por lo que cn no es igual a Alex:
(&(|(cn=Jon)(sn=Brion)(!(cn=Alex)))
Puede refinar los objetos de búsqueda utilizando el categoría de objeto y clase de objeto atributos
Parámetros válidos: persona, usuario, contacto, computadora, grupos, organizacionalPerson.
Usando el siguiente filtro, seleccione todos los usuarios llamados Jon:
(&(objectClass=user)(objectCategory=person)(cn=Jon))
Si no conoce el nombre exacto del objeto, puede utilizar el * carácter comodín en el filtro LDAP. Por ejemplo, la consulta anterior para encontrar usuarios cuyo nombre comience con Jo tendría que ser cambiado a:
(&(objectClass=user)(objectCategory=person)(cn=Jo*)) Get-ADObject -LdapFilter "(&(objectClass=user)(objectCategory=person)(cn=Jo*))" -properties givenName|select givenName
Ejemplos de consultas LDAP para Active Directory
Consideremos algunos ejemplos útiles de consultas LDAP que los administradores de AD suelen usar.
Busque administradores en grupos Administradores de dominio, Administradores de empresa:
(objectClass=user)(objectCategory=Person)(adminCount=1)
Enumere todos los usuarios de AD excepto los bloqueados:
(objectCategory=person)(objectClass=user)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)
Mostrar la lista de cuentas de usuario deshabilitadas:
(objectCategory=person)(objectClass=user)(useraccountcontrol:1.2.840.113556.1.4.803:=16)
Seleccione usuarios con la opción «La contraseña nunca caduca» habilitada:
(objectcategory=user)(userAccountControl:1.2.840.113556.1.4.803:=65536)
Usuarios con valores de correo electrónico vacíos:
(objectcategory=person)(!mail=*)
Enumere los usuarios con las Ventas especificadas en el campo Departamento:
(&(objectCategory=person)(objectClass=user)(department=Sales))
Puede verificar la membresía del grupo AD con el comando PowerShell:
(&(objectclass=user)(samacccountname=*)(MemberOf=CN=UKManagers,OU=Groups,OU=UK,DC=theitbros,DC=com))
Puede enumerar los grupos de los que el usuario es miembro:
(&(objectCategory=group)(member=CN=Jon Brion,OU=Employees,DC=theitbros,DC=com))
Enumere todas las cuentas de computadora deshabilitadas en AD:
(&(objectClass=computer)(userAccountControl:1.2.840.113556.1.4.803:=2))
Mostrar todas las computadoras con Windows 10:
(objectCategory=computer)(operatingSystem=Windows 10*)
Solo puede seleccionar equipos con una versión específica de Windows 10:
(&(&(objectCategory=computer)(operatingSystem=Windows 10*)(operatingSystemVersion=*19041*)))
Pista. Puede asignar la compilación de Windows 10 a la versión de acuerdo con la siguiente tabla:
Versión de Windows 10 | Número de compilación |
20H2 | 19042 |
2004 | 19041 |
1909 | 18363 |
1903 | 18362 |
1809 | 17763 |
Todos los controladores de dominio:
(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))
Todos los servidores de dominio miembro (excepto DC):
(&(objectCategory=computer)(operatingSystem=*server*)(!userAccountControl:1.2.840.113556.1.4.803:=8192))
Todas las instancias de MS SQL Server en AD:
(&(objectCategory=computer)(servicePrincipalName=MSSQLSvc*))
Lista de grupos creados para el período especificado:
(objectCategory=group)(whenCreated>=20200101000000.0Z&<=20201201000000.0Z&)
Enumere todos los grupos de AD vacíos:
(objectCategory=group)(!member=*)
Listar todos los grupos de distribución:
(&(objectCategory=group)(!groupType:1.2.840.113556.1.4.803:=2147483648))
Imprima todos los grupos con la clave *CIO* en el nombre del grupo:
(objectCategory=group)(samaccountname=*CIO*)
Encuentre todos los servidores de Exchange en el dominio:
(objectCategory=computer)(servicePrincipalName=exchangeMDB*)(operatingSystem=Windows Server*)
Todas las impresoras a color en un servidor de impresión específico publicado en AD:
(uncName=*lon-prnt*)(objectCategory=printQueue)(printColor=TRUE)