网络域名称列表获取与显示

在网络管理中,获取并显示所有域名称是一个常见的需求。通常,这些域名称以全限定域名(FQDN)的形式存在,例如yourdepartment.yourdomain.com。然而,可能需要以一种更友好的方式显示这些名称,类似于Windows登录界面上显示的格式。

为了实现这一目标,可以使用Active DS Library中的IADsNameTranslate接口。这个接口能够将不同的名称格式进行转换,包括将FQDN转换为更容易理解的格式。

首先,需要获取当前森林中的所有域。这可以通过获取Forest对象的DomainCollection属性来实现。然后,需要将这些域的FQDN格式转换为DN(Distinguished Name)格式,因为IADsNameTranslate接口只能处理DN格式。

以下是使用C#语言实现这一功能的示例代码:

using System.DirectoryServices.ActiveDirectory; using ActiveDs; private void ListDomains() { string sUserName = "xxxx"; string sPassword = "xxxx"; DirectoryContext oDirectoryContext = new DirectoryContext(DirectoryContextType.Domain, sUserName, sPassword); Domain oCurrentDomain = Domain.GetDomain(oDirectoryContext); Forest oForest = oCurrentDomain.Forest; DomainCollection oAddDomainsInForest = oForest.Domains; foreach (Domain oDomain in oAddDomainsInForest) { Console.WriteLine(GetName(oDomain.ToString())); } } private string GetName(string sDomainName) { try { IADsADSystemInfo oSysInfo = new ADSystemInfoClass(); IADsNameTranslate oNameTranslate = new NameTranslateClass(); oNameTranslate.Init((int)ADS_NAME_INITTYPE_ENUM.ADS_NAME_INITTYPE_DOMAIN, sDomainName); string[] aSplitDN = sDomainName.Split(new Char[] { '.' }); string sDistinguishedName = ""; // Convert Domain Name to Distinguished Name foreach (string sDomainPart in aSplitDN) { sDistinguishedName = sDistinguishedName + "DC=" + sDomainPart + ","; } oNameTranslate.Set((int)ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_UNKNOWN, sDistinguishedName.Remove(sDistinguishedName.Length - 1)); // Remove the last comma string sFriendlyName = oNameTranslate.Get((int)ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_NT4); return sFriendlyName.Replace(@"\", ""); } catch { return "Access Denied"; } }

在上述代码中,首先创建了一个DirectoryContext对象,用于连接到域。然后,获取当前域的Forest对象,并遍历其DomainCollection属性以获取所有域。对于每个域,调用GetName方法,该方法将FQDN转换为DN,然后使用IADsNameTranslate接口将其转换为更友好的格式。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485