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

102

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

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

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

ИЗМЕНИТЬ Если бы я хотел написать программу для поиска контроллера домена или пользователей в текущем домене, как бы я это сделал?

Дорки инженер
источник
Поскольку я потратил немного времени на написание решения для этого, я подумал, что сделаю это вопросом программирования и снова открою.
tvanfosson

Ответы:

253

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

echo %LOGONSERVER%
MZywitza
источник
Вероятно, не то, что Дорки имел в виду тогда, но все же, вероятно, то, что ищут большинство читателей потока. эх ... это было то, что искал Дорки. Ха!
андерсойвинд 07
3
Это не сработает, если вы ищете DC в другом домене, которому машина не принадлежит.
Brett Veenstra
@DorkyEngineer, как насчет того, чтобы отметить это как выбранный вами ответ?
ErikE 04
20

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

nltest /dclist:{domainname}

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

Ладо Морела
источник
3
и nltest /dclist:перечисляет все контроллеры в любом домене, к
которому
12

В 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);
           }
       }
    }
}
tvanfosson
источник
7

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

C:> УСТАНОВИТЬ L

LOGONSERVER = '\' \ DCNAME

Шри
источник
6

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

Эрике
источник
Мне пришлось использовать аргумент «/ R», чтобы получить отчет.
Джозия
Тебе стоит попробовать gpresult /Z!!
ErikE
В чем преимущество / Z? С точки зрения определения используемого постоянного тока они кажутся сопоставимыми.
Джозия
1
Люди могут захотеть, чтобы их перенаправили на этот вариант из-за обилия доступной информации. Но вы правы, для ТОЛЬКО используемого DC другие варианты более лаконичны.
ErikE
0

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

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

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
Бретт Винстра
источник