2016-10-26 48 views
0

当检索所有组/用户时,从活动目录中的DistinguishedName获取规范化路径的最佳方式是什么?有没有与下面的实现从活动目录中的DistinguishedName获取规范路径的最佳方法c#

foreach (SearchResult entry in results) 
      { 

       var distinguishedName = entry.Properties["distinguishedName"][0].ToString(); 
       entry.RefreshCache(new string[] { "canonicalName" }); 
       var canonicalName = entry.Properties["canonicalName"][0].ToString(); 


      } 

回答

0

您的代码将无法正常工作,如信息搜索结果中不包含RefreshCache方法的任何问题。将DN转换为CN的最佳方式是使用DsCrackNames函数。

您需要将DS_NAME_FORMAT.DS_FQDN_1779_NAME转换为DS_NAME_FORMAT.DS_CANONICAL_NAME。

执行此转换不需要Active Directory连接。您需要使用DS_NAME_FLAGS.DS_NAME_FLAG_SYNTACTICAL_ONLY标志,然后通过IntPtr.Zero作为连接处理

注意,外部安全主体不能转换使用此功能

但是,如果你已经DN查询,可以查询CN以及。在你的情况下,下面的代码应该工作:

 foreach (SearchResult entry in results) 
     { 
      var distinguishedName = entry.Properties["distinguishedName"][0].ToString(); 
      var canonicalName = entry.Properties["canonicalName"][0].ToString(); 
     } 

如果条目不包含CN,您需要在执行AD查询

之前将它添加到的DirectorySearcher的请求的属性