【问题标题】:Different result with DirectorySearcherDirectorySearcher 结果不同
【发布时间】:2016-08-23 14:03:58
【问题描述】:

我编写了一个小应用程序来检查 AD 组成员。当我在我的电脑上执行以下代码时,它运行良好,SearchResult 包含“成员”属性,但是当我在服务器或另一台计算机上运行相同的 exe 时,“成员”属性丢失。 usnchanged 和 usncreated 也会有所不同。我在每台电脑上使用相同的用户运行 exe。这是什么原因造成的?

...
using (DirectorySearcher searcher = new DirectorySearcher())
{
    searcher.CacheResults = false;
    searcher.Filter = "(&(objectClass=group)(cn=" + ADName + "))";
    searcher.SizeLimit = int.MaxValue;
    searcher.PageSize = int.MaxValue;
    if (!DirectoryEntry.Exists(ADPath))
    {
        return null;
    }
    searcher.SearchRoot = new DirectoryEntry(ADPath);
    using (SearchResultCollection collection = searcher.FindAll())
    {
        if (collection.Count == 1)
        {
            return collection[0];
        }
    }
}
...

【问题讨论】:

  • 在 ADPath 中你指向你的活动目录服务器?
  • ADPath 是“GC://DC=DOMAIN,DC=COMPANY,DC=com”

标签: c# active-directory directoryservices directorysearcher


【解决方案1】:

组成员数据不会复制到全局编录中。如果您碰巧使用实际成员数据连接到域控制器,则查询有时可能会起作用。在其他机器上,您可能连接到不同域的其他域控制器,而这些信息不可用。

您可能希望连接到实际域中的域控制器,而不是全局编录。

【讨论】:

  • 你是对的,如果我指定域控制器它运行良好,那么 ADPath 将是“GC://Domain_Controller_IP/DC=DOMAIN,DC=COMPANY,DC=com”。但是我怎样才能确定正确的域控制器,因为在服务器上,如果我从 cmd 运行 echo %LOGONSERVER% 它将给出与我的本地 PC 不同的输出。如果我从另一个域运行它,当然控制器也会有所不同。简单的方法是硬编码 ip,但我不想要它。
  • 您不必指定 IP。您可以使用“LDAP://Domain_Controller_Address/DC=DOMAIN,DC=COMPANY,DC=com”之类的内容。
  • 好吧,new PrincipalContext(ContextType.Domain, DOMAIN).ConnectedServer 包含正确的地址。感谢您的快速支持!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2015-01-19
  • 2014-12-26
  • 2014-05-09
  • 1970-01-01
相关资源
最近更新 更多