[英]What is best way to get canonical path from DistinguishedName in active directory c#
在检索所有组/用户时,从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();
}
您的代码不起作用,因为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,则需要在执行AD查询之前将其作为请求的属性添加到DirectorySearcher
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.