¿Cómo averiguo qué computadora es el controlador de dominio en Windows mediante programación?

102

Estoy buscando una manera de determinar cuál es el nombre / dirección IP del controlador de dominio para un dominio determinado al que está conectada una computadora cliente.

En nuestra empresa tenemos muchas pequeñas redes que usamos para realizar pruebas y la mayoría de ellas tienen sus propios dominios. Como ejemplo, uno de los dominios se llama "TESTLAB". Tengo una estación de trabajo con Windows XP que es miembro del dominio TESTLAB y estoy tratando de averiguar el nombre del controlador de dominio para poder ir y ver qué usuarios se han definido para el dominio. En nuestro laboratorio hay una combinación de Windows Server 2000 y Windows Server 2003 (y en realidad probablemente un par de servidores NT 4), por lo que sería bueno encontrar una solución que funcione para ambos.

Mirando en Internet, parece que hay varias utilidades, como Windows Power Shell o nltest, pero todas requieren que descargue e instale otras utilidades. Esperaba encontrar una manera de encontrar el controlador de dominio sin tener que instalar nada adicional.

EDITAR Si quisiera escribir un programa para encontrar el controlador de dominio o los usuarios en el dominio actual, ¿cómo haría eso?

Ingeniero tonto
fuente
Como pasé un poco de tiempo escribiendo una solución para esto, pensé en convertirlo en una pregunta de programación y volver a abrir.
tvanfosson

Respuestas:

253

Con el lenguaje de programación más simple: DOS batch

echo %LOGONSERVER%
MZywitza
fuente
Probablemente no sea lo que Dorky tenía en mente en ese entonces, pero aún así, probablemente lo que buscan la mayoría de los lectores del hilo. eh ... era lo que buscaba Dorky. ¡Ja!
andersoyvind
3
Esto no funcionará si está buscando un DC en otro dominio al que no pertenece la máquina.
Brett Veenstra
@DorkyEngineer, ¿qué tal si marca esto como su respuesta seleccionada?
ErikE
20

En cmd en Windows, escriba el siguiente comando:

nltest /dclist:{domainname}

Enumera todos los controladores de dominio en un dominio particular

Lado Morela
fuente
3
y nltest /dclist:enumera todos los controladores en cualquier dominio al que esté conectada mi computadora portátil (Windows 7)
GMasucci
12

En C # /. NET 3.5 podría escribir un pequeño programa para hacer:

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

Esto mostrará una lista de todos los usuarios en el dominio actual:

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
fuente
7

Desde la línea de comandos, consulte la variable env de logonserver.

C:> AJUSTAR L

LOGONSERVER = '\' \ DCNAME

Sri
fuente
6

Ejecutar gpresulten un símbolo del sistema de Windows. Obtendrá una gran cantidad de información sobre el dominio actual, el usuario actual, los grupos de seguridad de usuarios y equipos, los nombres de las políticas de grupo, el nombre distinguido de Active Directory, etc.

ErikE
fuente
Tuve que usar el argumento "/ R" para obtener el informe.
Josiah
¡Deberías intentarlo gpresult /Z!
ErikE
¿Cuál es la ventaja de / Z? A los efectos de determinar la CD en uso, parecen ser comparables.
Josiah
1
A la gente le puede gustar que se le dirija a la opción debido a la gran cantidad de información disponible. Pero tiene razón, SOLO para el DC en uso, otras opciones son más concisas.
ErikE
2

en Powershell: $ env: logonserver

Wim
fuente
0

Para recuperar la información cuando DomainControllerexiste en un dominio al que no pertenece su máquina, necesita algo más.

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

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