2016-08-23 118 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包含正確的地址。感謝您的快速支持! –