Bagaimana cara mengetahui komputer mana yang merupakan pengontrol domain di Windows secara terprogram?

102

Saya mencari cara untuk menentukan Nama / Alamat IP pengontrol domain untuk domain tertentu yang terhubung ke komputer klien.

Di perusahaan kami, kami memiliki banyak jaringan kecil kecil yang kami gunakan untuk pengujian dan kebanyakan dari mereka memiliki domain kecil mereka sendiri. Sebagai contoh, salah satu domain bernama "TESTLAB". Saya memiliki workstation Windows XP yang merupakan anggota dari domain TESTLAB dan saya mencoba untuk mengetahui nama pengontrol domain sehingga saya dapat pergi dan melihat untuk melihat pengguna apa yang telah ditetapkan untuk domain tersebut. Di lab kami ada campuran Windows Server 2000 dan Windows Server 2003 (dan pada kenyataannya mungkin beberapa Server NT 4) jadi alangkah baiknya menemukan solusi yang akan bekerja untuk keduanya.

Mencari di Internet, sepertinya ada berbagai utilitas, seperti Windows Power Shell atau nltest, tetapi ini semua mengharuskan Anda mengunduh dan menginstal utilitas lain. Saya berharap menemukan cara untuk menemukan pengontrol domain tanpa harus menginstal tambahan apa pun.

EDIT Jika saya ingin menulis program untuk menemukan pengontrol domain atau pengguna di domain saat ini, bagaimana cara saya melakukannya?

Insinyur konyol
sumber
Karena saya menghabiskan sedikit waktu untuk menulis solusi untuk ini, saya pikir saya akan membuatnya menjadi pertanyaan pemrograman dan membuka kembali.
tvanfosson

Jawaban:

253

Dengan bahasa pemrograman paling sederhana: batch DOS

echo %LOGONSERVER%
MZywitza
sumber
Mungkin bukan yang dipikirkan Dorky saat itu, tapi tetap saja, mungkin yang dicari oleh sebagian besar pembaca utas. eh ... ITU yang Dorky cari. Hah!
andersoyvind
3
Ini tidak akan berfungsi jika Anda mencari DC di Domain lain yang tidak dimiliki mesin tersebut.
Brett Veenstra
@DorkyEngineer, bagaimana kalau menandai ini sebagai jawaban pilihan Anda?
ErikE
20

Di cmd di Windows, ketik perintah berikut:

nltest /dclist:{domainname}

Ini mencantumkan semua pengontrol domain di domain tertentu

Lado Morela
sumber
3
dan nltest /dclist:mencantumkan semua pengontrol di domain mana pun yang terhubung dengan laptop saya (Windows 7)
GMasucci
12

Di C # /. NET 3.5 Anda dapat menulis program kecil untuk dilakukan:

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

Ini akan mencantumkan semua pengguna di domain saat ini:

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.dll
sumber
7

Dari kueri baris perintah, variabel env logonserver.

C:> SET L

LOGONSERVER = '\' \ DCNAME

Sri
sumber
6

Jalankan gpresultpada prompt perintah Windows. Anda akan mendapatkan banyak informasi tentang domain saat ini, pengguna saat ini, grup keamanan pengguna & komputer, nama kebijakan grup, Nama yang Dibedakan Direktori Aktif, dan sebagainya.

ErikE
sumber
Saya harus menggunakan argumen "/ R" untuk mendapatkan laporan.
Josiah
Kamu harus mencoba gpresult /Z!!
ErikE
Apa keuntungan dari / Z? Untuk tujuan menentukan DC yang digunakan, mereka tampaknya sebanding.
Yosia
1
Orang mungkin ingin diarahkan ke opsi karena banyaknya informasi yang tersedia. Tapi Anda benar, untuk HANYA DC yang digunakan, opsi lain lebih ringkas.
ErikE
2

di Powershell: $ env: logonserver

Wim
sumber
0

Untuk mengambil informasi ketika DomainControllerada di Domain di mana mesin Anda bukan miliknya, Anda memerlukan sesuatu yang lebih.

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

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