Làm cách nào để biết máy tính nào là bộ điều khiển miền trong Windows theo chương trình?


102

Tôi đang tìm cách xác định Tên / Địa chỉ IP của bộ điều khiển miền dành cho miền nhất định mà máy khách được kết nối với.

Tại công ty của chúng tôi, chúng tôi có rất nhiều mạng nhỏ nhỏ mà chúng tôi sử dụng để thử nghiệm và hầu hết chúng đều có tên miền nhỏ của riêng chúng. Ví dụ: một trong các miền được đặt tên là "TESTLAB". Tôi có một máy trạm Windows XP là thành viên của miền TESTLAB và tôi đang cố gắng tìm ra tên của bộ điều khiển miền để tôi có thể truy cập và xem những người dùng đã được xác định cho miền. Trong phòng thí nghiệm của chúng tôi có sự kết hợp giữa Windows Server 2000 và Windows Server 2003 (và trên thực tế có thể là một vài Máy chủ NT 4) vì vậy sẽ rất tuyệt nếu bạn tìm được giải pháp phù hợp cho cả hai.

Nhìn trên Internet, có vẻ như có nhiều tiện ích khác nhau, chẳng hạn như Windows Power Shell hoặc nltest, nhưng tất cả đều yêu cầu bạn tải xuống và cài đặt các tiện ích khác. Tôi đã hy vọng tìm ra cách tìm bộ điều khiển miền mà không cần phải cài đặt thêm bất kỳ thứ gì.

CHỈNH SỬA Nếu tôi muốn viết một chương trình để tìm bộ điều khiển miền hoặc người dùng trong miền hiện tại, tôi sẽ làm như thế nào?


Vì tôi đã dành một ít thời gian để viết giải pháp cho vấn đề này, tôi nghĩ mình sẽ biến nó thành một câu hỏi lập trình và mở lại.
tvanfosson

Câu trả lời:


253

Với ngôn ngữ lập trình đơn giản nhất: DOS batch

echo %LOGONSERVER%

Có lẽ không phải là những gì Dorky nghĩ trong đầu, nhưng vẫn có thể là điều mà hầu hết độc giả của chủ đề này đang tìm kiếm. ơ ... nó LÀ thứ mà Dorky đang tìm kiếm. Hả!
andersoyvind

3
Điều này sẽ không hoạt động nếu bạn đang tìm kiếm DC trong Miền khác mà máy không thuộc về.
Brett Veenstra

@DorkyEngineer đánh dấu đây là câu trả lời bạn đã chọn thì sao?
ErikE

20

Trong cmd trên Windows, hãy nhập lệnh sau:

nltest /dclist:{domainname}

Nó liệt kê tất cả các bộ điều khiển miền trong miền cụ thể


3
nltest /dclist:liệt kê tất cả các bộ điều khiển trên bất kỳ miền nào mà máy tính xách tay của tôi được kết nối với (Windows 7)
GMasucci

12

Trong C # /. NET 3.5, bạn có thể viết một chương trình nhỏ để làm:

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

Điều này sẽ liệt kê tất cả người dùng trong miền hiện tại:

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

Từ truy vấn dòng lệnh biến logonserver env.

C:> ĐẶT L

LOGONSERVER = '\' \ DCNAME


6

Chạy gpresulttại dấu nhắc lệnh Windows. Bạn sẽ nhận được nhiều thông tin về miền hiện tại, người dùng hiện tại, nhóm bảo mật người dùng và máy tính, tên chính sách nhóm, Tên phân biệt Active Directory, v.v.


Tôi đã phải sử dụng đối số "/ R" để có được báo cáo.
Josiah

Bạn nên thử gpresult /Z!!
ErikE

Lợi thế của / Z là gì? Với mục đích xác định DC đang sử dụng, chúng dường như có thể so sánh được.
Josiah

1
Mọi người có thể muốn được hướng dẫn đến tùy chọn vì có sẵn rất nhiều thông tin. Nhưng bạn nói đúng, chỉ vì DC được sử dụng, các tùy chọn khác sẽ ngắn gọn hơn.
ErikE


0

Để truy xuất thông tin khi DomainControllertồn tại trong Miền mà máy của bạn không thuộc về, bạn cần thêm thứ gì đó.

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

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.