2011-06-24 13 views
6

Al consultar a los usuarios sobre Active Directory, ¿hay alguna manera de filtrar las cuentas de usuario creadas para las computadoras? Idealmente, es una forma común en la mayoría de las redes típicas. ej .:¿Alguna manera de distinguir entre "cuentas de usuario de personas" y "cuentas de usuario de computadora"?

DirectorySearcher ds = new DirectorySearcher(new DirectoryEntry([Users_OU_root]));  
ds.filter = "(&(objectClass=User)([CRITERIA_TO_FILTER_OUT_COMPUTER_USER_ACCOUNTS]))";  
ds.FindAll();  
... 

Respuesta

6

Si estás en .NET 3.5 y arriba, usted debe comprobar el espacio de nombres System.DirectoryServices.AccountManagement (S.DS.AM). Leer todos los detalles aquí:

Básicamente, se puede definir un contexto de dominio y encontrar fácilmente los usuarios y/o grupos en el año:

// set up domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find a user 
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); 

if(user != null) 
{ 
    // do something here....  
} 

// find the group in question 
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere"); 

// if found.... 
if (group != null) 
{ 
    // iterate over members 
    foreach (Principal p in group.GetMembers()) 
    { 
     Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName); 
     // do whatever you need to do to those members 
    } 
} 

El El nuevo S.DS.AM hace que sea muy fácil jugar con usuarios y grupos en AD:

Las cuentas de equipo se mostrarán como ComputerPrincipal (derivado de Principal), por lo que puede mantener fácilmente separados los usuarios y las cuentas de la computadora.

Si no puede o no desea cambiarse a S.DS.AM, también puede mantener separados a los usuarios y las computadoras mediante el uso del objectCategory en lugar del objectClass en su filtro LDAP. objectCategory es beneficioso de todos modos, ya que está indexado, y no tiene múltiples valores, por lo que el rendimiento de las consultas será mucho mejor.

Para un usuario de la vida real, use objectCategory = Person, mientras que para una computadora, use objectCategory = Computer en su filtro LDAP.

3

Incluso si estoy de acuerdo con la respuesta. Active-Directory sigue siendo un servidor LDAP. Aquí es el filtro que busca:

(&(objectCategory=user)(objectClass=user)(...)) 

'objectCategory=user' es un atajo para 'objectCategory=CN=User,CN=Schema,CN=Configuration,DC=dom,DC=fr' entendida por Active Directory, pero también es una manera en otros directorios, por eso me puse una respuesta, incluso si otro la respuesta es aceptada

Cuestiones relacionadas