So erhalten Sie den NETBIOS-Domänennamen mithilfe des vollqualifizierten Domänennamens in einer komplexen Umgebung
Das Abrufen des NETBIOS-Domänennamens von einem vollständig qualifizierten Active Directory-Domänennamen ist manchmal eine mühsame Aufgabe. Ich habe eine gute Antwort gefundenHier.
In einer Umgebung mit mehreren Gesamtstrukturen funktioniert dieser Ansatz jedoch nicht, wenn sich der PC nicht in der Gesamtstruktur befindet, die Sie abfragen. Das ist weilLDAP://RootDSE
fragt Informationen zur Domäne des Computers ab.
Einige mögen fragen: Warum so kompliziert? Verwenden Sie einfach den Namen vor dem ersten Punkt, der abgerufen wird von:
ActiveDirectory.Domain.GetComputerDomain().Name;
Oder rufen Sie einfach den Domainnamen des Benutzers ab:
Environment.GetEnvironmentVariable("USERDOMAIN");
oder
Environment.UserDomainName;
ABER der NETBIOS-Domänenname kann etwas völlig anderes sein, und Sie oder Ihr Computer befinden sich möglicherweise in einer anderen Domäne oder Gesamtstruktur! Dieser Ansatz ist also nur in einer einfachen Umgebung anwendbar.
DJ KRAZE Die Lösung benötigt nur eine kleine Änderung, um domänenübergreifende Abfragen zu ermöglichen. Dies setzt eine Vertrauensbeziehung voraus!
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;
}