Jak uzyskać nazwę domeny NETBIOS przy użyciu FQDN w złożonym środowisku
Uzyskanie nazwy domeny NETBIOS z w pełni kwalifikowanej nazwy domeny Active Directory jest czasem żmudnym zadaniem. Znalazłem dobrą odpowiedźtutaj.
W środowisku z wieloma lasami takie podejście nie będzie jednak działać, jeśli komputer nie znajduje się w lesie, którego dotyczy zapytanie. To dlatego, żeLDAP://RootDSE
zapyta o informacje dotyczące domeny komputera.
Niektórzy mogą zapytać: dlaczego tak skomplikowane? Po prostu użyj nazwy przed pierwszą kropką pobraną przez:
ActiveDirectory.Domain.GetComputerDomain().Name;
Lub po prostu uzyskaj nazwę domeny użytkownika:
Environment.GetEnvironmentVariable("USERDOMAIN");
lub
Environment.UserDomainName;
ALE nazwa domeny NETBIOS może być czymś zupełnie innym, a Ty lub Twój komputer może znajdować się w innej domenie lub lesie! Takie podejście jest użyteczne tylko w prostym środowisku.
DJ KRAZE rozwiązanie wymaga tylko jednej małej modyfikacji, aby umożliwić kwerendy między domenami. Zakłada to relację zaufania!
private string GetNetbiosDomainName(string dnsDomainName)
{
string netbiosDomainName = string.Empty;
DirectoryEntry rootDSE = new DirectoryEntry(string.Format("LDAP://{0}/RootDSE",dnsDomainName));
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;
}