2014-05-09 1 views
3

Je développe une bibliothèque C# .NET Framework pour accéder au répertoire actif.Quand ai-je besoin d'un nom de domaine et d'un conteneur de domaine pour créer un PrincipalContext?

L'une des choses que je dois faire est d'obtenir tous les utilisateurs AD, et je vois que:

PrincipalContext principalContext = 
    new PrincipalContext(ContextType.Domain, 
          domainName.Trim(), 
          domainContainer.Trim()); 

Et

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain); 

Renvoie les mêmes utilisateurs avec ce code:

// define a "query-by-example" principal - here, we search for all users 
UserPrincipal qbeUser = new UserPrincipal(principalContext); 

// create your principal searcher passing in the QBE principal  
PrincipalSearcher srch = new PrincipalSearcher(qbeUser); 

// find all matches 
foreach (var found in srch.FindAll()) 
{ 
    UserPrincipal user = found as UserPrincipal; 
    if (user != null) 
    { 
     Console.WriteLine(user.SamAccountName); 
    } 
} 

Quand dois-je utiliser un nom de domaine et un conteneur de domaine?

Répondre

8

Lorsque vous utilisez

var context = new PrincipalContext(ContextType.Domain); 

Il se connecte au domaine du contexte actuel, généralement le domaine l'utilisateur qui a exécuté l'application est connecté, ou lancera une exception si le contexte actuel est un utilisateur local pas connecté à un domaine.

Lorsque vous utilisez

var context = new PrincipalContext(ContextType.Domain, domainName, domainContainer); 

La propriété de domaine vous permet de vous connecter à un domaine autre que celui du contexte actuel, en supposant que le contexte actuel dispose des autorisations ou vous fournir des informations d'identification valides. Par exemple, dans un environnement où plusieurs domaines d'une forêt ou d'un domaine sont approuvés, vous pouvez spécifier un autre domaine sur lequel exécuter les requêtes au lieu de celui auquel l'utilisateur appartient.

Les propriétés du conteneur limitent toutes les requêtes à l'aide de DomainContext au conteneur spécifié.

+1

Pour clarifier, cela signifie-t-il (exemple 1) qu'un utilisateur doit se trouver sur une machine connectée au domaine? – Cody

0

Le contexte est utilisé pour créer une entrée de répertoire de cette façon:

new DirectoryEntry("LDAP://domain_name/container") 

ou quand il n'y a pas de conteneur:

new DirectoryEntry("LDAP://domain_name/rootDse") 

Vous pouvez omettre le nom de domaine, mais je vous suggère d'inclure toujours Comme j'ai eu des problèmes avec ça dans le passé (quelques exceptions lancées aléatoirement).

Vous devez inclure le conteneur lorsque vous souhaitez restreindre la recherche à une unité d'organisation spécifique.

Questions connexes