2016-08-23 167 views
0

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

... 
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]; 
     } 
    } 
} 
... 
+0

而在ADPath中,您指向您的活动目录服务器? – rene

+0

ADPath是“GC:// DC = DOMAIN,DC = COMPANY,DC = com” –

回答

0

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

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

+0

如果我指定域控制器运行良好,那么ADPath将为“GC:// Domain_Controller_IP/DC = DOMAIN ,DC = COMPANY,DC = COM”。 但是我怎样才能确定正确的域控制器,因为在服务器上,如果我从cmd运行echo%LOGONSERVER%,它会给出比我的本地PC不同的输出。如果我从另一个领域运行它,控制器也会不同。 简单的方法是硬编码的IP,但我不想要它。 –

+0

您不必指定IP。您可以使用“LDAP:// Domain_Controller_Address/DC = DOMAIN,DC = COMPANY,DC = com”之类的内容。 – Tomer

+0

好的,新的PrincipalContext(ContextType.Domain,DOMAIN).ConnectedServer包含正确的地址。感谢您的快速支持! –