Як дізнатися, на якому комп’ютері програмно контролер домену в Windows?


102

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

У нашої компанії є маса маленьких маленьких мереж, які ми використовуємо для тестування, і більшість з них мають свої маленькі домени. Як приклад, один з доменів названий "TESTLAB". У мене є робоча станція Windows XP, яка є членом домену TESTLAB, і я намагаюся з’ясувати ім’я контролера домену, щоб я міг зайти і подивитися, які користувачі були визначені для домену. У нашій лабораторії є поєднання Windows Server 2000 та Windows Server 2003 (а насправді, мабуть, декілька серверів NT 4), тому було б непогано знайти рішення, яке би працювало для обох.

З Інтернету, схоже, є різні утиліти, такі як Windows Power Shell або nltest, але для цього потрібно завантажити та встановити інші утиліти. Я сподівався знайти спосіб знайти контролер домену, не встановлюючи нічого додаткового.

EDIT Якщо я хотів би написати програму, щоб знайти контролер домену або користувачів у поточному домені, як би я пішов робити це?


Оскільки я витратив трохи часу на написання рішення для цього, я подумав, що перетворять його на питання програмування і знову відкриє.
tvanfosson

Відповіді:


253

З найпростішою мовою програмування: пакетна DOS

echo %LOGONSERVER%

Напевно, не те, що Доркі мав на увазі тоді, але все ж, мабуть, те, що шукає більшість читачів нитки. е ... це було те, що шукав Доркі. Га!
andersoyvind

3
Це не спрацює, якщо ви шукаєте постійного струму в іншому домені, до якого машина не належить.
Бретт Веенстра

@DorkyEngineer як щодо позначення цього обраною відповіддю?
ErikE

20

У cmd у Windows введіть таку команду:

nltest /dclist:{domainname}

У ньому перераховані всі контролери домену, зокрема домен


3
і nltest /dclist:перераховує всі контролери в будь-якому домені, до якого підключений мій ноутбук (Windows 7)
GMasucci

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

7

З запиту командного рядка змінна env logonserver.

C:> SET 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();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.