我有一个用户对象的引用,此对象的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();
答案 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) 中,都有名为 allowedAttributes
和 allowedAttributesEffective
的动态属性。
在通过 de.Attributes [] 进行标准检索时,返回 null
。您必须首先使用这些参数强制重建对象缓存 (de.RefreshCache
)。
我的代码:
public static List<string> AllAvailableProperties(this DirectoryEntry de)
{
de.RefreshCache(new string[] { "allowedAttributes" });
return de.Properties["allowedAttributes"].AsStringList();
}
如果我们想要一个类的属性列表,我们应该获取这个类的任何对象(现有的)。