如何以编程方式找出Windows中的域控制器是哪台计算机?


102

我正在寻找一种方法来确定客户端计算机连接到的给定域的域控制器的名称/ IP地址。

在我们公司中,我们有许多用于测试的小型小型网络,其中大多数都有自己的小型域。例如,一个域被命名为“ TESTLAB”。我有一个Windows XP工作站,它是TESTLAB域的成员,并且我试图找出域控制器的名称,以便我可以去看看为该域定义了哪些用户。在我们的实验室中,混合使用了Windows Server 2000和Windows Server 2003(实际上可能是几个NT 4服务器),因此很高兴找到一个适用于两者的解决方案。

在Internet上看,似乎有各种实用程序,例如Windows Power Shell或nltest,但是所有这些都需要您下载并安装其他实用程序。我希望找到一种无需安装其他任何东西即可找到域控制器的方法。

编辑如果我想编写一个程序来查找域控制器或当前域中的用户,我将如何去做?


由于我花了一些时间为此编写解决方案,所以我认为我会将其纳入编程问题,然后重新打开。
tvanfosson

Answers:


253

使用最简单的编程语言:DOS批处理

echo %LOGONSERVER%

那时可能不是Dorky想到的,但仍然可能是大多数线程读者正在寻找的东西。嗯...这就是Dorky想要的东西。哈哈!
andersoyvind 2011年

3
如果要在不属于该计算机的另一个域中查找DC,则此方法将无效。
布雷特·文斯特拉

@DorkyEngineer如何将此标记为您选择的答案?
ErikE

20

在Windows上的cmd中,键入以下命令:

nltest /dclist:{domainname}

它列出了特定域中的所有域控制器


3
nltest /dclist:列出我的笔记本电脑连接到的任何域上的所有控制器(Windows 7)
GMasucci

12

在C#/。NET 3.5中,您可以编写一个小程序来做:

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

这将列出当前域中的所有用户:

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

从命令行查询logonserver env变量。

C:> SET L

LOGONSERVER ='\'\ DCNAME


6

gpresult在Windows命令提示符下运行。您将获得有关当前域,当前用户,用户和计算机安全组,组策略名称,Active Directory专有名称等的大量信息。


我必须使用参数“ / R”来获取报告。
乔西亚

你应该尝试gpresult /Z
ErikE

/ Z的优点是什么?为了确定使用中的DC,它们似乎具有可比性。
乔西亚2015年

1
由于可获得的大量信息,人们可能会喜欢使用该选项。但是,您是对的,对于仅使用DC而言,其他选择更为简洁。
ErikE 2015年


0

DomainController在不属于您的计算机的域中存在信息时检索信息,您还需要一些其他信息。

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

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.