使用c#的Active Directory属性列表

时间:2011-03-17 05:10:02

标签: c# active-directory ldap

如何使用c#获取活动目录用户属性列表(不是特定用户,即所有属性)例如,邮件等?

6 个答案:

答案 0 :(得分:5)

如果您使用的是.NET 3.5及更高版本,则需要查看System.DirectoryServices.ActiveDirectory中的类。您需要查看ActiveDirectorySchemaActiveDirectorySchemaClass等类。

您可以使用以下方法获取当前的AD架构:

ActiveDirectorySchema currSchema = ActiveDirectorySchema.GetCurrentSchema();

当您拥有当前架构时,您可以检查各种类定义,例如:

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

拥有该对象后,您可以检查并枚举其属性,例如:

  • MandatoryProperties
  • OptionalProperties

以深入了解AD架构。

答案 1 :(得分: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");
        }  

另外,请查看:http://www.codeproject.com/KB/system/everythingInAD.aspx

答案 2 :(得分:0)

您可以使用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);
 }

答案 3 :(得分:0)

虽然ADExplorer没有列出所有可用的属性,但我发现它是一个很棒的工具,可以看到发生了什么。

您可以从http://technet.microsoft.com/en-us/sysinternals/bb963907.aspx

下载

答案 4 :(得分:0)

在此处扩展 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
...

答案 5 :(得分:-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());
}

上述代码会将Active Directory的所有搜索属性添加到UserPropertyList...