2017-09-06 52 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