如何在 C# 或 JavaScript 中将 DN 拆分并加入到来自 Active Directory 对象的路径

Posted

技术标签:

【中文标题】如何在 C# 或 JavaScript 中将 DN 拆分并加入到来自 Active Directory 对象的路径【英文标题】:How to split and join a DN to a path from an Active Directory object in either C# or JavaScript 【发布时间】:2021-09-17 15:29:57 【问题描述】:

使用以下内容:

string distinguishedName = deUser.Properties["distinguishedName"].Value.ToString();

转储到列表中为我提供了测试用户的正确 DN:

CN=Test User,OU=PHL,OU=_users,DC=testdomain,DC=local

我希望输出以对象所在路径的形式读取,例如:

testdomain.local/_users/PHL

我在***上进行了搜索,它使用只显示父OU的方法返回了相当多的旧帖子,但没有任何路径。

如何将上面的 DN 转换为字符串路径,不知道如何拆分和加入它,因为我基本上需要将 DN 从右到左反转,中间用“/”替换逗号。

我在 C#.Net 的列表中使用以下内容...

UsersList.Add(new UserAttributes


    Id = id++,
    FirstName = FirstName,
    MiddleInitial = MiddleInitial,
    LastName = LastName,
    SAMAccountName = samaccountName,
    description = Description,                             
    DistinguishedName = distinguishedName,
    email = email                                
);

return UsersList;

我们将不胜感激任何有关 javascript 或 C# 的帮助。我正在使用数据表,因此我可以使用列中的“渲染”功能进行拆分和连接。

如果有人可以在 javascript 或 c# 中使用简单的字符串开始

string distName = "CN=Test User,OU=PHL,OU=_users,DC=testdomain,DC=local";

或者一个

var distName = "CN=Test User,OU=PHL,OU=_users,DC=testdomain,DC=local";

并告诉我如何拆分,加入,反转它,我应该可以把它变成一个函数来使用。

谢谢

【问题讨论】:

在Javascript中,使用字符串拆分方法,然后数组可以根据需要使用join方法和reverse方法来做 输入var distName = "CN=Test User,OU=PHL,OU=_users,DC=testdomain,DC=local";的预期输出是什么 谢谢大家。如果有人可以做一个代码 sn-p,我希望它阅读:testdomain.local/_users/PHL 【参考方案1】:
using System;
using System.Collections.Generic;

public class Program

    public static void Main()
    
        string test = "CN=Test User,OU=PHL,OU=_users,DC=testdomain,DC=local";

        List<string> splitted = new List<string>(test.Split(','));

        int ouCount = 0;
        for(int i = 0; i < splitted.Count; i++)
        
            string[] split = splitted[i].Split('=');
            splitted[i] = split[1];
        
            if(split[0] == "OU")
            
                ouCount++;
            
        

        string result = splitted[splitted.Count - 2] + "." + splitted[splitted.Count - 1];
        for(int i = 0; i < ouCount; i++)
        
             result += "/" + splitted[i + 1];
        

        Console.WriteLine(result);
    

对于拆分,您可以使用 string.Split() 函数。您写道要反转您的列表,但您给定的输出示例与此不匹配。

【讨论】:

谢谢 Maitai,我在上面对 Javascript 的 Rahul 发表了类似的评论。你的也适用于 C#。但是,如果我不知道 OU 的数量怎么办?我只以上面的一个为例。我假设它可能是一个寻找有多少“OU”的for循环。例如,它可以是“CN=Test User, OU=Firewalls, OU=Network Devices, OU=PHL,OU=_users,DC=testdomain,DC=local”。我的环境中的一些结构有 9 个 OU 深。再次感谢 如果 DN 值包含逗号,则逗号分割将不起作用,因为它将被转义并且看起来像 CN=Test \, User, OU=... ***.com/a/40269546/6826115 将对象 dn 转换为 cn【参考方案2】:

使用String.split() 分割comma (,),然后使用模板文字格式化路径输出。

var distName = "CN=Test User,OU=PHL,OU=_users,DC=testdomain,DC=local";

const getValue = (input) => input.split("=").pop();

const formattedPath = (str) => 
  const list = str.split(",");
  const len = list.length;
  return `$getValue(list[len-2]).$getValue(list[len-1])/$getValue(list[len-3])/$getValue(list[len-4])`;


console.log(formattedPath(distName));

【讨论】:

感谢 Rahul,这在 JavaScript 中非常有效。还有一件事,如果我不知道 OU 的数量怎么办?我只以上面的一个为例。我假设它可能是一个寻找有多少“OU”的for循环。例如,它可以是“CN=Test User, OU=Firewalls, OU=Network Devices, OU=PHL,OU=_users,DC=testdomain,DC=local”。我的环境中的一些结构有 9 个 OU 深。再次感谢 @muttBunch,上述示例的预期输出是什么?

以上是关于如何在 C# 或 JavaScript 中将 DN 拆分并加入到来自 Active Directory 对象的路径的主要内容,如果未能解决你的问题,请参考以下文章

如何 out.println Apache JKEnvVar SSL_CLIENT_DN 从 mod_ssl 到 java、javascript 或 html?

如何在 C# 中将列表或数组转换为子类型?

如何在 C# 中将上标或下标转换为普通文本

如何在 SQL Server 或 C# 代码中将行转换为列

如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?

如何在 C++/CLI 或 C# 中将静态结构数据保存到二进制文件