Как узнать, какой компьютер является контроллером домена в Windows программно? - PullRequest
95 голосов
/ 09 декабря 2008

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

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

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

РЕДАКТИРОВАТЬ Если бы я хотел написать программу для поиска контроллера домена или пользователей в текущем домене, как бы я это сделал?

Ответы [ 7 ]

249 голосов
/ 09 декабря 2008

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

echo %LOGONSERVER%
18 голосов
/ 01 октября 2015

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

nltest /dclist:{domainname}

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

12 голосов
/ 09 декабря 2008

В 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);
           }
       }
    }
}
7 голосов
/ 24 февраля 2015

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

C:> SET L

LOGONSERVER = '\' \ DCNAME

6 голосов
/ 04 января 2013

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

2 голосов
/ 06 марта 2018

в Powershell: $ env: logonserver

0 голосов
/ 13 ноября 2012

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

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

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...