Как узнать, какой компьютер является контроллером домена в Windows программно?


Я ищу способ определить, что такое имя / IP-адрес контроллера домена для данного домена, к которому подключен клиентский компьютер.

в нашей компании мы имеем много маленьких сетей, которые мы используем для тестирования и большинство из них имеют свои собственные небольшие Домены. Например, один из доменов называется "TESTLAB". У меня есть рабочая станция Windows XP, которая является членом домена TESTLAB, и я пытаюсь выяснить имя контроллера домена, поэтому что я могу пойти и посмотреть, какие пользователи были определены для домена. В нашей лаборатории есть сочетание Windows Server 2000 и Windows Server 2003 (а на самом деле, вероятно, несколько серверов NT 4), поэтому было бы неплохо найти решение, которое будет работать для обоих.

глядя в Интернете, похоже, что существуют различные утилиты, такие как Windows Power Shell или nltest, но все они требуют загрузки и установки других утилит. Я надеялся найти способ найти контроллер домена без необходимости устанавливать что-либо дополнительное.

EDIT если бы я хотел написать программу для поиска контроллера домена или пользователей в текущем домене, как бы я это сделал?

7 93

7 ответов:

С самым простым языком программирования: DOS batch

echo %LOGONSERVER%

в cmd в Windows введите следующую команду:

nltest /dclist:{domainname}

в нем перечислены все контроллеры домена в конкретном домене

В C# / .NET 3.5 вы можете написать небольшую программу, чтобы сделать:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    string controller = context.ConnectedServer;
    Console.WriteLine( "Domain Controller:" + controller );
} 

это будет список всех пользователей текущего домена:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    using (UserPrincipal searchPrincipal = new UserPrincipal(context))
    {
       using (PrincipalSearcher searcher = new PrincipalSearcher(searchPrincipal))
       {
           foreach (UserPrincipal principal in searcher.FindAll())
           {
               Console.WriteLine( principal.SamAccountName);
           }
       }
    }
}

из командной строки запросите переменную logonserver env.

C: > SET L

LOGONSERVER= ' \ ' \DCNAME

Run gpresult в командной строке Windows. Вы получите обилие информации о текущем домене, текущем пользователе, группах безопасности пользователя и компьютера, именах групповой политики, отличительном имени Active Directory и т. д.

в Powershell: $env: logonserver

чтобы получить информацию, когда DomainController существует в домене, в котором ваша машина не принадлежит, вам нужно что-то еще.

  DirectoryContext domainContext =  new DirectoryContext(DirectoryContextType.Domain, "targetDomainName", "validUserInDomain", "validUserPassword");

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();