【问题标题】:Convert Distinguished Name to Canonical Name将专有名称转换为规范名称
【发布时间】:2023-07-17 21:31:01
【问题描述】:

使用System.DirectoryServices(即DirectoryEntry 类)是否可以将DistinguishedName 属性转换为或获取通常出现在Active Directory 用户和计算机中的规范名称 嵌入式?我意识到我可以使用正则表达式来做到这一点,但我更喜欢更可靠的方法。

比如我要转换这个

CN=Murdock\,James,OU=Disabled Users,OU=GOG,DC=contoso,DC=local

到这里

contoso.local/GOG/Disabled Users/Murdock, James

【问题讨论】:

    标签: c# active-directory directoryservices directoryentry


    【解决方案1】:

    这是一个构造属性。在 DirectoryEntry 上,您需要使用 RefreshCache:

    var de = new DirectoryEntry("CN=Murdock\, James,OU=Disabled Users,OU=GOG,DC=contoso,DC=local");
    de.RefreshCache(new string[] {"canonicalName"});
    

    【讨论】:

    • 并使用 System.DirectoryServices.AccountManagementUserPrincipal.DistinguishedName
    • 您需要将其放在自己的问题中 - * 的 TPTB 不喜欢 cmets 中的补充问题。一定要在此处添加指向新问题的链接。
    【解决方案2】:

    您需要 canonicalName 属性。假设您已经拥有将用户作为 DirectoryEntry 获取的代码。

    userDe.Properties["canonicalName"][0].ToString()
    

    【讨论】:

    • 该属性不存在。至少在我的环境中没有。
    • 对不起,我应该更彻底。 “canonicalName”是必须指定的属性。它是一个构造属性,似乎不会与标准 DE 对象一起返回(抱歉,应该先检查一下)。如果您使用的是 SDS,则可以使用 DirectorySearcher 和 PropertiesToLoad.Add("canonicalName") 来获取值。