Como obter o nome de domínio NETBIOS usando o FQDN em um ambiente complexo

Obter o nome de domínio NETBIOS de um nome de domínio totalmente qualificado do Active Directory às vezes é uma tarefa tediosa. Eu encontrei uma boa respostaAqui.

Em um ambiente com várias florestas, essa abordagem não funcionará se o PC não estiver na floresta que você está consultando. Isto é porqueLDAP://RootDSE consultará informações sobre o domínio do computador.

Alguns podem perguntar: por que tão complicado? Basta usar o nome antes do primeiro ponto recuperado por:

ActiveDirectory.Domain.GetComputerDomain().Name;

Ou apenas obtenha o nome de domínio do usuário:

Environment.GetEnvironmentVariable("USERDOMAIN");

ou

Environment.UserDomainName;

Mas o nome de domínio NETBIOS pode ser algo completamente diferente e você ou seu computador podem estar em um domínio ou floresta diferente! Portanto, essa abordagem é utilizável apenas em um ambiente simples.

DJ KRAZE A solução precisa de apenas uma pequena modificação para permitir consultas entre domínios. Isso pressupõe uma relação de confiança!

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