Come faccio a sapere quale computer è il controller di dominio in Windows a livello di programmazione?


102

Sto cercando un modo per determinare quale sia il nome / indirizzo IP del controller di dominio per un determinato dominio a cui è connesso un computer client.

Nella nostra azienda abbiamo molte piccole reti che utilizziamo per i test e la maggior parte di esse ha i propri piccoli domini. Ad esempio, uno dei domini è denominato "TESTLAB". Ho una workstation Windows XP che è un membro del dominio TESTLAB e sto cercando di capire il nome del controller di dominio in modo da poter andare a vedere quali utenti sono stati definiti per il dominio. Nel nostro laboratorio c'è un mix di Windows Server 2000 e Windows Server 2003 (e in realtà probabilmente un paio di server NT 4) quindi sarebbe bello trovare una soluzione che funzioni per entrambi.

Guardando su Internet, sembra che ci siano varie utilità, come Windows Power Shell o nltest, ma tutte richiedono il download e l'installazione di altre utilità. Speravo di trovare un modo per trovare il controller di dominio senza dover installare nulla di aggiuntivo.

MODIFICA Se volessi scrivere un programma per trovare il controller di dominio o gli utenti nel dominio corrente, come dovrei farlo?


Dato che ho passato un po 'di tempo a scrivere una soluzione per questo, ho pensato di trasformarla in una domanda di programmazione e di riaprirla.
tvanfosson

Risposte:


253

Con il linguaggio di programmazione più semplice: DOS batch

echo %LOGONSERVER%

Probabilmente non quello che Dorky aveva in mente, allora, ma comunque, probabilmente quello che la maggior parte dei lettori del thread sta cercando. eh ... era quello che Dorky stava cercando. Hah!
andersoyvind

3
Questo non funzionerà se stai cercando un controller di dominio in un altro dominio a cui la macchina non appartiene.
Brett Veenstra

@DorkyEngineer, che ne dici di contrassegnarlo come risposta selezionata?
ErikE

20

In cmd su Windows, digita il comando seguente:

nltest /dclist:{domainname}

Elenca tutti i controller di dominio in un determinato dominio


3
ed nltest /dclist:elenca tutti i controller su qualsiasi dominio a cui è connesso il mio laptop (Windows 7)
GMasucci

12

In C # /. NET 3.5 potresti scrivere un programmino da fare:

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

Questo elencherà tutti gli utenti nel dominio corrente:

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

Dalla riga di comando interrogare la variabile env logonserver.

C:> SET L

LOGONSERVER = '\' \ DCNAME


6

Esegui gpresultal prompt dei comandi di Windows. Otterrai un'abbondanza di informazioni sul dominio corrente, l'utente corrente, i gruppi di sicurezza di utenti e computer, i nomi dei criteri di gruppo, il nome distinto di Active Directory e così via.


Ho dovuto utilizzare l'argomento "/ R" per ottenere il rapporto.
Josiah,

Dovresti provare gpresult /Z!!
ErikE

Qual è il vantaggio di / Z? Ai fini della determinazione della CC in uso, sembrano essere comparabili.
Josiah,

1
Le persone potrebbero voler essere indirizzate all'opzione a causa della ricchezza di informazioni disponibili. Ma hai ragione, SOLO per la DC in uso, le altre opzioni sono più succinte.
ErikE

2

in Powershell: $ env: logonserver


0

Per recuperare le informazioni quando DomainControlleresiste in un dominio a cui la tua macchina non appartiene, hai bisogno di qualcosa di più.

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

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.