2011-03-17 1 views
1

Comment obtenir la liste des attributs d'utilisateur de l'annuaire actif (pas d'attributs particuliers de l'utilisateur, par exemple), par exemple, etc.Liste d'attributs Active Directory à l'aide de C#

+0

Je pense que vous devriez marquer ceci avec "répertoire actif", pas asp.net ou mvc, puisque la question ne se rapporte à aucun d'entre eux. – neontapir

+0

ou peut-être vous devriez ajouter tag ldap –

Répondre

1
DirectoryEntry dir = new DirectoryEntry(); 
    dir.Path = "LDAP://YourActiveDirServername ";   
    DirectorySearcher sea = new DirectorySearcher(dir); 
    sea.Filter = "(sAMAccountName=Uname)"; 
    SearchResult seares = sea.FindOne();  
    StringBuilder str = new StringBuilder(); 
    System.DirectoryServices.ResultPropertyCollection prop = seares.Properties; 
    ICollection coll = prop.PropertyNames; 
    IEnumerator enu = coll.GetEnumerator(); 
     while (enu.MoveNext()) 
     { 
      str.Append(enu.Current + " = " + seares.Properties[enu.Current.ToString()][0] + "\n"); 
     } 

Aussi, jetez un oeil à: http://www.codeproject.com/KB/system/everythingInAD.aspx

+1

Cela va seulement pour vous donner les propriétés que cet utilisateur a (par exemple, où il y a une valeur définie pour cet utilisateur). Ceci ** n'énumère ** pas ** toutes ** les propriétés définies dans le schéma LDAP –

+0

Cela ne vous procure que des propriétés pour cet utilisateur ... pas pour "tous les attributs" comme l'indique la question. –

4

Si vous êtes sur .NET 3.5 et, vous devez vérifier les classes System.DirectoryServices.ActiveDirectory pour cela. Vous devez regarder des classes comme ActiveDirectorySchema et ActiveDirectorySchemaClass.

Vous pouvez mettre la main sur le schéma AD actuel en utilisant:

ActiveDirectorySchema currSchema = ActiveDirectorySchema.GetCurrentSchema(); 

Lorsque vous avez le schéma actuel, vous pouvez vérifier les différentes définitions de classe, par exemple:

ActiveDirectorySchemaClass userSchema = currSchema.FindClass("person"); 

Une fois que vous avez cet objet, vous pouvez inspecter et énumérer ses propriétés, des choses telles que:

  • MandatoryProperties
  • OptionalProperties

et ainsi de suite pour obtenir un aperçu du schéma AD.

+1

doh, vous êtes 3 secondes plus vite que moi :) –

0

Vous pouvez utiliser WMI:

ObjectGetOptions objectGetOptions = new ObjectGetOptions(null, System.TimeSpan.MaxValue, true); 
ManagementClass managementClass = new ManagementClass("root\\directory\\LDAP", "ads_user", objectGetOptions); 

foreach (PropertyData dataObject in managementClass.Properties) 
{ 
    Console.WriteLine(dataObject.Name); 
} 
-1
UserPropertyList = new List<string>(); 

ActiveDirectorySchema currSchema = ActiveDirectorySchema.GetCurrentSchema(); 

ICollection Collection = currSchema.FindAllProperties(); 

IEnumerator Enumerator = Collection.GetEnumerator(); 

while (Enumerator.MoveNext()) 
{ 
    UserPropertyList.Add(Enumerator.Current.ToString()); 
} 

Le code ci-dessus ajoutera tous les attributs de recherche d'Active Directory pour la UserPropertyList...

0

expansion sur marc_s de réponse ici. Voici un exemple de code complet qui imprime le nom commun et le nom de l'attribut réel.

ActiveDirectorySchema schema = ActiveDirectorySchema.GetCurrentSchema(); 
ActiveDirectorySchemaClass person = schema.FindClass("user"); 
foreach(ActiveDirectorySchemaProperty property in person.GetAllProperties()) 
{ 
    Console.WriteLine("{0} = {1}", property.CommonName, property.Name); 
} 

Exemple de sortie.

Common-Name = cn 
Instance-Type = instanceType 
NT-Security-Descriptor = nTSecurityDescriptor 
Object-Category = objectCategory 
Object-Class = objectClass 
Object-Sid = objectSid 
SAM-Account-Name = sAMAccountName 
Account-Expires = accountExpires 
...