web-dev-qa-db-fra.com

Comment savoir quel ordinateur est le contrôleur de domaine dans Windows par programme?

Je cherche un moyen de déterminer quel est le nom/l'adresse IP du contrôleur de domaine pour un domaine donné auquel un ordinateur client est connecté.

Dans notre entreprise, nous utilisons beaucoup de petits réseaux que nous utilisons pour les tests et la plupart d’entre eux ont leurs propres petits domaines. Par exemple, l'un des domaines s'appelle "TESTLAB". J'ai un poste de travail Windows XP qui est membre du domaine TESTLAB et j'essaie de déterminer le nom du contrôleur de domaine afin de pouvoir consulter les utilisateurs définis. Dans notre laboratoire, il existe une combinaison de Windows Server 2000 et Windows Server 2003 (et en réalité probablement quelques serveurs NT 4), il serait donc agréable de trouver une solution qui conviendrait aux deux.

En regardant sur Internet, il semble qu'il existe divers utilitaires, tels que Windows Power Shell ou nltest, mais ils nécessitent tous le téléchargement et l'installation d'autres utilitaires. J'espérais trouver un moyen de trouver le contrôleur de domaine sans rien installer de plus.

EDIT Si je voulais écrire un programme pour trouver le contrôleur de domaine ou les utilisateurs du domaine actuel, comment pourrais-je m'y prendre?

96
Dorky Engineer

Avec le langage de programmation le plus simple: DOS batch

echo %LOGONSERVER%
250
MZywitza

Dans cmd sous Windows, tapez la commande suivante:

nltest /dclist:{domainname}

Il répertorie tous les contrôleurs de domaine dans un domaine particulier

19
Lado Morela

En C #/.NET 3.5, vous pouvez écrire un petit programme à faire:

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

Ceci listera tous les utilisateurs du domaine actuel:

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

A partir de la ligne de commande, interrogez la variable env de logonserver.

C:> SET L

LOGONSERVER = '\'\DCNAME

7
Sri

Exécutez gpresult à l'invite de commande Windows. Vous obtiendrez de nombreuses informations sur le domaine actuel, les utilisateurs actuels, les groupes de sécurité utilisateur et ordinateur, les noms de stratégie de groupe, le nom unique Active Directory, etc.

6
ErikE

dans Powershell: $ env: logonserver

2
Wim

Pour récupérer les informations lorsque le DomainController existe dans un domaine auquel votre ordinateur n'appartient pas, vous avez besoin de quelque chose de plus.

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

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