2009-12-04 4 views
3

J'ai une question sur la détermination du type (utilisateur ou groupe) d'un nom de compte.
Par exemple, j'ai deux chaînes, disons "Adventure-works \ david" et "Adventure-works \ admins", le premier représente un utilisateur nommé david, et le second représente un groupe AD.Comment déterminer le type (utilisateur AD contre groupe AD) d'un compte?

Ma question est comment puis-je déterminer le type (utilisateur ou groupe AD) de ce compte? Y a-t-il une méthode pratique que je peux utiliser?

Tous les commentaires sont appréciés. Merci.

+0

Merci pour votre réponse et votre rappel. – ddou

Répondre

9

Quelle est la version de .NET?

Si vous êtes sur .NET 3.5, voyez cet excellent MSDN article sur la façon dont l'interface Active Directory a beaucoup changé.

Si vous êtes sur .NET 3.5, vous pouvez écrire:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"); 
Principal myObject = Principal.FindByIdentity(ctx, "your name value"); 

En règle générale, il faudrait passer simplement le nom d'utilisateur - la partie après la barre oblique inverse - pas tout DOMAIN \ USERNAME chaîne.

Ce "principal" maintenant soit est un UserPrincipal ou un GroupPrincipal (ou il pourrait d'un autre type de capital, par exemple ComputerPrincipal):

if(myObject is UserPrincipal) 
{ 
    // you have a user 
} 
else if(myObject is GroupPrincipal) 
{ 
    // you have a group 
} 

et vous pouvez à partir de là.


Si vous êtes sur .NET 1.x/2.0/3.0, vous devriez utiliser la procédure un peu plus impliqué de créer un DirectorySearcher et la recherche de votre objet:

// create root DirectoryEntry for your search 
DirectoryEntry deRoot = new DirectoryEntry("LDAP://dc=YourCompany,dc=com"); 

// create searcher    
DirectorySearcher ds = new DirectorySearcher(deRoot); 

ds.SearchScope = SearchScope.Subtree; 

// define LDAP filter - all you can specify is the "anr" (ambiguous name 
// resolution) attribute of the object you're looking for 
ds.Filter = string.Format("(anr={0})", "YourNameValue"); 

// define properties you want in search result(s) 
ds.PropertiesToLoad.Add("objectCategory"); 
ds.PropertiesToLoad.Add("displayName"); 

// search 
SearchResult sr = ds.FindOne(); 

// check if we get anything back, and if we can check the "objectCategory" 
// property in the search result 
if (sr != null) 
{ 
    if(sr.Properties["objectCategory"] != null) 
    { 
     // objectType will be "Person" or "Group" (or something else entirely) 
     string objectType = sr.Properties["objectCategory"][0].ToString(); 
    } 
} 

Marc

+0

Merci pour votre message, ça aide beaucoup. J'utilise .NET 2.0. Même si, il faut plus de codes pour terminer cette tâche, cela fonctionne. – ddou

Questions connexes