如何在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
相关产品推荐
相关产品推荐

