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;
    }

questionAnswers(1)

yourAnswerToTheQuestion