2017-09-06 51 views
0

我試圖使用System.DirectoryServices .NET Framework類庫訪問Active Directory域服務(ADDS)。System.DirectoryServices中的目錄同步參數無例外

使用LDAP協議,我想是有這個LDAP過濾辦公室設定值屬性的所有DirectoryEntries (physicalDeliveryOfficeName = *),然後我想在同步餅乾寫入文件以備將來參考就像DirectorySynchronization msdn example article

這裏所示的例子是我的代碼:

using (DirectoryEntry de = new DirectoryEntry("LDAP://myDomain.com/OU=Test,DC=myDomain,DC=com")) 
     { 
      using (var ds = new DirectorySearcher(de)) 
      { 
       ds.PropertiesToLoad.Add("distinguishedName"); 
       ds.SearchScope = SearchScope.Subtree; 
       ds.Filter = "(physicalDeliveryOfficeName=*)"; 
       ds.DirectorySynchronization = new DirectorySynchronization(); 
       SearchResultCollection searchResultCollection = ds.FindAll(); 
       foreach (SearchResult result in searchResultCollection) 
       { 
        var dn = (string)result.Properties["distinguishedName"][0]; 
        //do Something 
       } 

       var cookie = ds.DirectorySynchronization.GetDirectorySynchronizationCookie(); 
       File.WriteAllBytes(@"location", cookie); 
      } 
     } 

我每次運行此代碼

ds.DirectorySynchronization = new DirectorySynchronization(); 

我得到一個System.ArgumentNullException每當我打電話ds.FindAll()。知道每當我評論同一行代碼時,我都會得到一個沒有問題的搜索結果。

我希望我的聲音夠清楚。 出於某種原因,我覺得這個領域有一點文件。我真的找不到對此的解釋。

回答

0

DirectorySynchronization必須分配給域根LDAP路徑,不適用於像組織單位這樣的子目錄。

using(DirectoryEntry de = new DirectoryEntry("LDAP://myDomain.com/DC=myDomain,DC=com")){ 

//same code 

} 

這會解決問題。

如果有人想要跟蹤子目錄中的更改(如OU),他們應該使用USNChanged