How to get domain alias using System.DirectoryServices.ActiveDirectory.Domain class
active-directory, alias, c#, domain-name
Solution
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;
}
Problem
We have a domain with full name, e.g. long-domainname.com; this domain name is replaced with alias short. this alias can be retrieved using `netapi32.dll`, like this: ``` [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; } ``` This method return the sort value. But using the `System.DirectoryServices.ActiveDirectory.Domain` class, and its `Name` property, I get long-domainname.com value. Searching the properties under the Debug mode, I couldn't find any short value field or property. Is it possible with `System.DirectoryServices.ActiveDirectory.Domain` class? Or may be it is possible with some other class of `System.DirectoryServices` namespace? How to get the short domain name value without importing external *.dll?