GetDirectoryEntry不返回所有属性

时间:2012-07-06 13:45:52

标签: c# active-directory

我正在尝试查询AD以检索用户数据。

查询工作正常,但在枚举通过GetDirectoryEntry返回的属性时 我无法看到我在Active Directory资源管理器中看到的所有属性。

以下代码段:

offEntry = pResult.GetDirectoryEntry();
foreach (PropertyValueCollection o in offEntry.Properties)
{
    Debug.Print(o.PropertyName + " = " + o.Value.ToString());
}

我看到像“displayName”和“SAMAccountName”等属性,但不是我真正想要的属性,例如:“postalCode”,“streetAddress”。

我试图寻找这个特定问题的解决方案,但已经走到了尽头。 我错过了什么?

此致 彼得

2 个答案:

答案 0 :(得分:1)

你应该可以使用这样的搜索者类。

DirectorySearcher search = new DirectorySearcher(entry);
                search.Filter = "(sAMAccountName=" + userAccount + ")";
                search.PropertiesToLoad.Add("mail");
                SearchResult result = search.FindOne();

然后通过行

加载您想要的属性
            search.PropertiesToLoad.Add("mail");

然后在您的SearchResult中,您将能够阅读属性

答案 1 :(得分:0)

这是一个旧的,但也许它可以帮助其他人:

  1. 保留DirectorySearcher的PropertiesToLoad 清空(无.add)将导致所有已包含值的属性
  2. SearchResult有一个返回实际DirectoryEntry的方法:result.GetDirectoryEntry()。其中(我仍然试图阻止)将加载已填充值的所有属性。
  3. DirectoryEntry有一个“InvokeSet”方法来填充尚未填充的属性,之后将返回它们。 (还有一个“InvokeGet”方法,没有尝试过那个,但也许它有助于获得空的属性)