martes, 28 de mayo de 2013

Buscar objectos en todo el AD con PowerShell

Hace poco un amigo estaba haciendo un script en PowerShell que debía mostrar usuarios de diferentes dominios. El principal problema era que una consulta PowerShell solo le traía como resultado usuarios de un dominio específico dentro de un Forest de AD, por lo que para conectarse a cada dominio debía iniciar una conexión con un New-PSDrive.
 
Esto era un poco trabajoso y algo impráctico, por lo que se me ocurrió buscar una forma diferente de hacerlo.
 
Para probarlo utilicé un Forest que contiene varios dominios. En este Forest tengo tres cuentas de usuario con mi nombre, una en un dominio (Baires.qthworld.net), dos en otro dominio (London.qthworld.net) y ninguna en muchos otros dominios del Forest.
 
Conectado al dominio Roma.qthworld.net, importé el modulo de PowerShell para AD e hice una consulta PowerShell con el cmd-let

Get-ADUser -Filter 'anr -like "Esteban De Leo"' | Measure-Object

Figura 1
 
Con "Get-ADUser" podemos buscar usuarios de AD; la opción "Filter" nos permite hacer un filtrado de los resultados, en este caso todos los "arn" que sean "like" (como) "Esteban De Leo". Desde luego el resultado en el dominio que estaba conectado por default fue cero (Figura 1). Con "Measure-Object" indicamos que cuente la cantidad de resultados, pero no muestre los resultados.
 
Aclaremos que "anr" (Ambiguous Name Resolution) permite buscar una cadena de caracteres dentro de múltiples propiedades de AD. Pero también puedo usar otros filtros como "name", "mail" o "DistinguishedName" con Get-ADUser.
 
Para hacer la consulta en el dominio Baires, simplemente indicamos con el parámetro "Server" que Get-ADUser utilice un Domain Controller que sea de Baires (Figura 2).


Figura 2
 
Similar al consultar en London (Figura 3), donde nos muestra dos resultados.

Figura 3

¿Pero qué pasa si queremos indicar que nos muestre todos los resultados en el Forest? Simplemente indicamos un server que sea Global Catalog y que utilice el puerto de Global Catalog, ya que por default usa en de Domain Controller (Figura 4).

 
 
En este último caso, vemos los tres objetos que están en diferentes dominios de todo el Forest.