You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#或JavaScript中将Active Directory的DN转换为路径格式

AD 可分辨名称(DN)转路径格式实现方案

转换逻辑说明

  • 按逗号拆分DN字符串为独立属性片段
  • 分离所有DC(域组件)片段,拼接为域名格式(用.连接)
  • 分离所有OU(组织单元)片段,反转顺序后用/连接
  • 忽略CN(公共名称)片段,最终拼接为「域名/反转后OU路径」的格式

C# 实现代码

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

// 拆分所有片段
var parts = distName.Split(',');
List<string> dcParts = new List<string>();
List<string> ouParts = new List<string>();

foreach (var part in parts)
{
    var keyValue = part.Split('=');
    if (keyValue.Length != 2) continue;
    
    var key = keyValue[0].Trim();
    var value = keyValue[1].Trim();
    
    if (key.Equals("DC", StringComparison.OrdinalIgnoreCase))
    {
        dcParts.Add(value);
    }
    else if (key.Equals("OU", StringComparison.OrdinalIgnoreCase))
    {
        ouParts.Add(value);
    }
}

// 拼接结果
string domain = string.Join(".", dcParts);
ouParts.Reverse();
string ouPath = string.Join("/", ouParts);
string result = $"{domain}/{ouPath}";

// 输出结果:testdomain.local/_users/PHL
Console.WriteLine(result);

JavaScript 实现代码

基础实现:

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

const parts = distName.split(',');
const dcParts = [];
const ouParts = [];

parts.forEach(part => {
    const [key, value] = part.split('=');
    if (!key || !value) return;
    
    const trimKey = key.trim();
    const trimValue = value.trim();
    
    if (trimKey.toUpperCase() === 'DC') {
        dcParts.push(trimValue);
    } else if (trimKey.toUpperCase() === 'OU') {
        ouParts.push(trimValue);
    }
});

const domain = dcParts.join('.');
const ouPath = ouParts.reverse().join('/');
const result = `${domain}/${ouPath}`;

// 输出结果:testdomain.local/_users/PHL
console.log(result);

如果需要在DataTables的列render函数中直接使用,可以参考如下配置:

columns: [
    // 其他列配置省略
    {
        data: 'distinguishedName',
        render: function (data) {
            const parts = data.split(',');
            const dcParts = [];
            const ouParts = [];
            parts.forEach(part => {
                const [key, value] = part.split('=');
                if (!key || !value) return;
                const trimKey = key.trim().toUpperCase();
                const trimValue = value.trim();
                if (trimKey === 'DC') dcParts.push(trimValue);
                else if (trimKey === 'OU') ouParts.push(trimValue);
            });
            return `${dcParts.join('.')}/${ouParts.reverse().join('/')}`;
        }
    }
]

内容的提问来源于stack exchange,提问作者muttBunch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 10:27:02