如何获取DirectoryEntry的所有可用属性

时间:2015-08-20 10:59:47

标签: c# active-directory directoryservices

我有一个用户对象的引用,此对象的Properties集合将只包含已设置值的属性但我需要检查此对象是否存在属性(按名称) - 我猜这个会来自架构。

我查看了deUser.SchemaEntry,但我找不到此对象的任何有用的属性信息。

有什么想法吗?

DirectoryEntry deUser = new DirectoryEntry(path);

foreach (var prop in deUser.Properties)
{
   //if user.Properties["company"] is not set on this user then 
   //it will not be available here although 'company' is 
   //a property defined for the user class
}

//How do I get to the list of all available properties using 
//deUserSchema as below
DirectoryEntry deUserSchema = deUser.SchemaEntry();

3 个答案:

答案 0 :(得分:0)

要列出所有属性,请尝试:

foreach (var name in deUser.Properties.PropertyNames)
{
   Console.WriteLine(name);
}

答案 1 :(得分:0)

根据MSDN,您可以使用DirectoryEntry.SchemaEntry检索所有属性。

  

条目架构确定其强制和可选属性名称的列表。   您可以使用此属性来查找关联对象上可用的属性和方法。

String myADSPath = "LDAP://onecity/CN=Users,DC=onecity,DC=corp,DC=fabrikam,DC=com";

// Creates an Instance of DirectoryEntry.
DirectoryEntry  myDirectoryEntry=new DirectoryEntry(myADSPath, UserName, SecurelyStoredPassword);

// Gets the SchemaEntry of the ADS object.
DirectoryEntry mySchemaEntry = myDirectoryEntry.SchemaEntry;

if (string.Compare(mySchemaEntry.Name,"container") == 0)
{
   foreach(DirectoryEntry myChildDirectoryEntry in myDirectoryEntry.Children)
   {
       //...do what you need
   }
}

答案 2 :(得分:0)

结果证明问题比看起来更容易解决。在 AD 中的每个对象 (DirectoryEntry) 中,都有名为 allowedAttributesallowedAttributesEffective 的动态属性。

在通过 de.Attributes [] 进行标准检索时,返回 null。您必须首先使用这些参数强制重建对象缓存 (de.RefreshCache)。 我的代码:

public static List<string> AllAvailableProperties(this DirectoryEntry de)
{
      de.RefreshCache(new string[] { "allowedAttributes" });
      return de.Properties["allowedAttributes"].AsStringList();
}

如果我们想要一个类的属性列表,我们应该获取这个类的任何对象(现有的)。