2008-12-09 8 views
89

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.¿Cómo puedo saber qué computadora es el controlador de dominio en Windows mediante programación?

En nuestra empresa tenemos muchas pequeñas redes pequeñas que usamos para probar y la mayoría de ellas tienen sus propios pequeños dominios. Como ejemplo, uno de los dominios se llama "TESTLAB". Tengo una estación de trabajo Windows XP que es miembro del dominio TESTLAB y estoy tratando de averiguar el nombre del controlador de dominio para que pueda ver qué usuarios se han definido para el dominio. En nuestro laboratorio hay una mezcla 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.

Al buscar en Internet, parece que hay varias utilidades, como Windows Power Shell o nltest, pero todas requieren la descarga e instalación de otras utilidades. Esperaba encontrar una forma de encontrar el controlador de dominio sin tener que instalar nada adicional.

EDIT Si quisiera escribir un programa para encontrar el controlador de dominio o los usuarios en el dominio actual, ¿cómo iba a hacer eso? .

+0

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

Respuesta

237

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

echo %LOGONSERVER% 
+0

Tú ganas. Eso es exactamente lo que estaba buscando. –

+3

agradable y simple ... ¡genial! +1 – jkp

+0

Probablemente no es lo que Dorky tenía en mente, en ese momento, pero aún así, probablemente lo que la mayoría de los lectores de hilo están buscando. eh ... ERA lo que Dorky estaba buscando. Hah! – andersoyvind

11

En C#/.NET 3.5 se 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 muestra 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); 
      } 
     } 
    } 
} 
0

para recuperar la información cuando el DomainController existe en un Dom Cuando su máquina no pertenece, 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(); 
6

Ejecute gpresult en un símbolo del sistema de Windows. Obtendrá una gran cantidad de información sobre el dominio actual, el usuario actual, el usuario & grupos de seguridad informática, los nombres de las políticas de grupo, el nombre distinguido de Active Directory, y así sucesivamente.

+0

Tuve que usar el argumento "/ R" para obtener el informe. – flickerfly

+0

¡Deberías probar 'gpresult/Z' !! – ErikE

+0

¿Cuál es la ventaja de/Z? Con el propósito de determinar el DC en uso, parecen ser comparables. – flickerfly

7

Desde la línea de comandos consulta la variable de registro logonserver.

C:> L SET

LOGONSERVER = '\' \ DCNAME

+0

no sabía que el comando set se comportó de esta manera. ¡Gracias por el consejo! – ojblass

9

En cmd en Windows, escriba lo siguiente commande:

nltest /dclist:{domainname} 

En él se enumeran todos los controladores de dominio en el dominio particular

+3

y 'nltest/dclist:' enumera todos los controladores en cualquier dominio al que está conectado mi portátil (Windows 7) – GMasucci

0

en Powershell: $ env: logonserver

+0

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente [reputación] (https://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (https://stackoverflow.com/help/privileges/comment); en su lugar, [brinde respuestas que no requieran aclaración del autor de la pregunta] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-instead). - [De la crítica] (/ review/low-quality-posts/19019083) – cezar

Cuestiones relacionadas