Список атрибутов Active Directory с использованием c # - PullRequest
2 голосов
/ 17 марта 2011

Как получить список пользовательских атрибутов активного каталога (не определенных пользовательских атрибутов ieall), например, ccn, mail и т. Д., Используя c #?

Ответы [ 6 ]

5 голосов
/ 17 марта 2011

Если вы используете .NET 3.5 и выше, вам нужно проверить классы в System.DirectoryServices.ActiveDirectory для этого.Вам нужно посмотреть на классы, такие как ActiveDirectorySchema и ActiveDirectorySchemaClass.

Вы можете получить доступ к текущей схеме AD, используя:

ActiveDirectorySchema currSchema = ActiveDirectorySchema.GetCurrentSchema();

Если у вас есть текущая схема, вы можете проверить различные определения классов, например:

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

Получив этот объект, вы можете проверить и перечислить его свойства, например:

  • MandatoryProperties
  • OptionalProperties

и т. Д., Чтобы получить представление о схеме AD.

1 голос
/ 17 марта 2011
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");
        }  

Также взгляните на: http://www.codeproject.com/KB/system/everythingInAD.aspx

0 голосов
/ 07 ноября 2014

Расширение ответа marc_s здесь.Вот полный пример кода, который печатает общее имя и фактическое имя атрибута.

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

Пример вывода.

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
...
0 голосов
/ 29 марта 2011
UserPropertyList = new List<string>();

ActiveDirectorySchema currSchema = ActiveDirectorySchema.GetCurrentSchema();

ICollection Collection = currSchema.FindAllProperties();

IEnumerator Enumerator = Collection.GetEnumerator();

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

Приведенный выше код добавит все атрибуты поиска Active Directory в UserPropertyList...

0 голосов
/ 23 марта 2011

Хотя ADExplorer не перечисляет все доступные атрибуты, я нашел его отличным инструментом для просмотра того, что и где.

Вы можете скачать его с http://technet.microsoft.com/en-us/sysinternals/bb963907.aspx

0 голосов
/ 17 марта 2011

Вы можете использовать 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);
 }
...