【问题标题】:javascript code for converting distinguished name into canonical name用于将专有名称转换为规范名称的 javascript 代码
【发布时间】:2019-11-25 15:39:16
【问题描述】:

这是专有名称:

"CN=Peterson\,Misha,OU=Users,OU=Bright,OU=APAC,DC=xyz,DC=ang,DC=com". 

我需要把它转换成

"xyz.ang.com/APAC/Bright/Users/Peterson,Misha"

即,规范名称。

  1. “DC”部分中的任何内容都使用“.”连接。即“xyz.ang.com”

  2. “OU”部分中的任何内容都在后面。中间有“/”。

  3. 最后是“CN”部分,即“Peterson,Misha”。

下面的 javascript 代码产生“Peterson/”作为输出。

private static string ExtractCN(string dn)
{
    string[] parts = dn.Split(new char[] { ',' });

    for (int i = 0; i < parts.Length; i++)
    {
        var p = parts[i];
        var elems = p.Split(new char[] { '=' });
        var t = elems[0].Trim().ToUpper();
        var v = elems[1].Trim();
        if (t == "CN")
        {
            return v;
        }
    }
    return null;
}

我想要“xyz.ang.com/APAC/Bright/Users/Peterson,Misha”作为输出。

【问题讨论】:

  • 嗨。欢迎来到 Stackoverflow。因此,我们不是巫师,无法猜测您尝试了什么(并提供了您尝试的代码示例)或未能理解的内容。我强烈建议您在发布问题之前阅读指南how-to-ask
  • 我已经编辑了我的问题
  • 你,你已经发现你有一个问题,因为名字也有它?
  • 是的,我已经被 ',' 分割了。还有什么可能的解决方案?
  • 您能说明一下您使用的语言吗?你说 JavaScript,但那个代码不是 JavaScript。我在我的回答中假设了 C#。

标签: javascript active-directory


【解决方案1】:

最简单的方法是将\, 替换为一些保证不会出现在字符串中其他任何位置的字符串。这样,当您Split(",") 时,它会被忽略。

然后在返回结果时将其替换为,。在这种情况下,我使用"{comma}"

private static string ExtractCN(string dn)
{
    dn = dn.Replace("\\,", "{comma}");
    string[] parts = dn.Split(new char[] { ',' });

    for (int i = 0; i < parts.Length; i++)
    {
        var p = parts[i];
        var elems = p.Split(new char[] { '=' });
        var t = elems[0].Trim().ToUpper();
        var v = elems[1].Trim();
        if (t == "CN")
        {
            return v.Replace("{comma}", ",");
        }
    }
    return null;
}

这回答了您的直接问题,但您仍有一些工作要做,因为这只会返回 "Peterson,Misha",而不是完整的规范名称。

理论上,您可以通过不使用 Split 并自己遍历字符串中的每个字符来获得更好的性能......但我怀疑它会产生明显的差异。

您的代码示例看起来更像 C# 而不是 JavaScript。如果您确实在使用 C#,则可以直接从 Active Directory 中提取 canonicalName 属性的值:

var de = new DirectoryEntry($"LDAP://{dn}");
de.RefreshCache(new [] { "canonicalName" });
var canonicalName = (string) de.Properties["canonicalName"].Value;

【讨论】:

  • 请提供完整的拆分代码。
猜你喜欢
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
相关资源
最近更新 更多