【问题标题】:What is best way to get canonical path from DistinguishedName in active directory c#从活动目录c#中的DistinguishedName获取规范路径的最佳方法是什么
【发布时间】:2017-03-08 18:59:58
【问题描述】:

在检索所有组/用户时,从 Active Directory 中的 DistinguishedName 获取规范路径的最佳方法是什么?下面的实现有什么问题吗

foreach (SearchResult entry in results)
            {

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


            }

【问题讨论】:

    标签: c# active-directory directoryservices


    【解决方案1】:

    您的代码将不起作用,因为 SearchResult 不包含 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,则需要将其作为请求属性添加到DirectorySearcher,然后再进行AD查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2011-10-26
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多