Wie finde ich programmgesteuert heraus, welcher Computer der Domänencontroller in Windows ist?

102

Ich suche nach einer Möglichkeit, den Namen / die IP-Adresse des Domänencontrollers für eine bestimmte Domäne zu ermitteln, mit der ein Clientcomputer verbunden ist.

In unserem Unternehmen haben wir viele kleine Netzwerke, die wir zum Testen verwenden, und die meisten von ihnen haben ihre eigenen kleinen Domänen. Beispielsweise heißt eine der Domänen "TESTLAB". Ich habe eine Windows XP-Workstation, die Mitglied der TESTLAB-Domäne ist, und ich versuche, den Namen des Domänencontrollers herauszufinden, damit ich nachsehen kann, welche Benutzer für die Domäne definiert wurden. In unserem Labor gibt es eine Mischung aus Windows Server 2000 und Windows Server 2003 (und in Wirklichkeit wahrscheinlich ein paar NT 4-Servern), daher wäre es schön, eine Lösung zu finden, die für beide funktioniert.

Im Internet sieht es so aus, als gäbe es verschiedene Dienstprogramme wie Windows Power Shell oder nltest. Für diese müssen Sie jedoch andere Dienstprogramme herunterladen und installieren. Ich hatte gehofft, einen Weg zu finden, um den Domänencontroller zu finden, ohne etwas zusätzliches installieren zu müssen.

BEARBEITEN Wenn ich ein Programm schreiben wollte, um den Domänencontroller oder die Benutzer in der aktuellen Domäne zu finden, wie würde ich das tun?

Dorky Ingenieur
quelle
Da ich ein wenig Zeit damit verbracht habe, eine Lösung dafür zu schreiben, dachte ich, ich würde daraus eine Programmierfrage machen und sie wieder öffnen.
Tvanfosson

Antworten:

253

Mit der einfachsten Programmiersprache: DOS Batch

echo %LOGONSERVER%
MZywitza
quelle
Wahrscheinlich nicht das, was Dorky damals im Sinn hatte, aber dennoch wahrscheinlich das, wonach die meisten Leser des Threads suchen. eh ... es war das, wonach Dorky suchte. Hah!
andersoyvind
3
Dies funktioniert nicht, wenn Sie nach einem Domänencontroller in einer anderen Domäne suchen, zu der der Computer nicht gehört.
Brett Veenstra
@DorkyEngineer Wie wäre es, wenn Sie dies als Ihre ausgewählte Antwort markieren?
ErikE
20

Geben Sie in cmd unter Windows den folgenden Befehl ein:

nltest /dclist:{domainname}

Es werden alle Domänencontroller in einer bestimmten Domäne aufgelistet

Lado Morela
quelle
3
und nltest /dclist:listet alle Controller in jeder Domäne auf, mit der mein Laptop verbunden ist (Windows 7)
GMasucci
12

In C # /. NET 3.5 können Sie ein kleines Programm schreiben, um Folgendes zu tun:

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

Dadurch werden alle Benutzer in der aktuellen Domäne aufgelistet:

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

Über die Befehlszeilenabfrage die logonserver env-Variable.

C:> SET L.

LOGONSERVER = '\' \ DCNAME

Sri
quelle
6

Führen Sie gpresultan einer Windows-Eingabeaufforderung aus. Sie erhalten eine Fülle von Informationen über die aktuelle Domäne, den aktuellen Benutzer, Benutzer- und Computersicherheitsgruppen, Gruppenrichtliniennamen, Active Directory Distinguished Name usw.

ErikE
quelle
Ich musste das Argument "/ R" verwenden, um den Bericht zu erhalten.
Josiah
Du solltest es versuchen gpresult /Z!!
ErikE
Was ist der Vorteil von / Z? Zur Bestimmung des verwendeten DC scheinen sie vergleichbar zu sein.
Josiah
1
Aufgrund der Fülle verfügbarer Informationen möchten die Leute möglicherweise auf die Option hingewiesen werden. Aber Sie haben Recht, für NUR den verwendeten DC sind andere Optionen prägnanter.
ErikE
2

in Powershell: $ env: Anmeldeserver

Wim
quelle
0

Um die Informationen abzurufen, wenn sie DomainControllerin einer Domäne vorhanden sind, zu der Ihr Computer nicht gehört, benötigen Sie etwas mehr.

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

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