如何使用System.DirectoryServices.ActiveDirectory.Domain类获取域别名

我们有一个全名域名,例如long-domainname.com ; 此域名将替换为别名short 。 可以使用netapi32.dll检索此别名,如下所示:

 [DllImport("Netapi32.dll")] static extern int NetApiBufferFree(IntPtr Buffer); // Returns the domain name the computer is joined to, or "" if not joined. public static string GetJoinedDomain() { int result = 0; string domain = null; IntPtr pDomain = IntPtr.Zero; NetJoinStatus status = NetJoinStatus.NetSetupUnknownStatus; try { result = NetGetJoinInformation(null, out pDomain, out status); if (result == ErrorSuccess && status == NetJoinStatus.NetSetupDomainName) { domain = Marshal.PtrToStringAuto(pDomain); } } finally { if (pDomain != IntPtr.Zero) NetApiBufferFree(pDomain); } if (domain == null) domain = ""; return domain; } 

此方法返回排序值。 但是使用System.DirectoryServices.ActiveDirectory.Domain类及其Name属性,我得到long-domainname.com值。 在调试模式下搜索属性,我找不到任何值字段或属性。 是否可以使用System.DirectoryServices.ActiveDirectory.Domain类? 或者可能有一些其他类的System.DirectoryServices命名空间? 如何在不导入外部* .dll的情况下获取域名值?

 private string GetNetbiosDomainName(string dnsDomainName) { string netbiosDomainName = string.Empty; DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE"); string configurationNamingContext = rootDSE.Properties["configurationNamingContext"][0].ToString(); DirectoryEntry searchRoot = new DirectoryEntry("LDAP://cn=Partitions," + configurationNamingContext); DirectorySearcher searcher = new DirectorySearcher(searchRoot); searcher.SearchScope = SearchScope.OneLevel; searcher.PropertiesToLoad.Add("netbiosname"); searcher.Filter = string.Format("(&(objectcategory=Crossref)(dnsRoot={0})(netBIOSName=*))", dnsDomainName); SearchResult result = searcher.FindOne(); if (result != null) { netbiosDomainName = result.Properties["netbiosname"][0].ToString(); } return netbiosDomainName; }