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

Posted

技术标签:

【中文标题】如何以编程方式找出哪台计算机是 Windows 中的域控制器?【英文标题】:How do I find out which computer is the domain controller in Windows programmatically? 【发布时间】:2010-09-26 02:59:57 【问题描述】:

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

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

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

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

【问题讨论】:

因为我花了一点时间为此写了一个解决方案,我想我会把它变成一个编程问题并重新打开。 【参考方案1】:

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

echo %LOGONSERVER%

【讨论】:

可能不是 Dorky 当时的想法,但仍然可能是大多数线程读者正在寻找的。嗯……这正是 Dorky 想要的。哈! 如果您在机器不属于的另一个域中寻找 DC,这将不起作用。 @DorkyEngineer 将其标记为您选择的答案怎么样?【参考方案2】:

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

nltest /dclist:domainname

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

【讨论】:

nltest /dclist: 列出了我的笔记本电脑连接到的任何域上的所有控制器(Windows 7)【参考方案3】:

在 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);
           
       
    

【讨论】:

【参考方案4】:

从命令行查询 loginserver 环境变量。

C:> 设置 L

LOGONSERVER='\'\DCNAME

【讨论】:

【参考方案5】:

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

【讨论】:

我必须使用参数“/R”来获取报告。 你应该试试gpresult /Z!! /Z 有什么好处?为了确定使用的 DC,它们似乎具有可比性。 由于可用信息的丰富性,人们可能希望被引导至该选项。但你是对的,对于使用中的 DC,其他选项更简洁。【参考方案6】:

在 Powershell 中:$env:logonserver

【讨论】:

【参考方案7】:

要在DomainController 存在于您的机器不属于的域中时检索信息,您需要更多的东西。

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

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

【讨论】:

以上是关于如何以编程方式找出哪台计算机是 Windows 中的域控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式找出哪些频道是给定 YouTube 网络的一部分?

如何以编程方式找出联系人是不是可在android中编辑

以编程方式在远程计算机上安装 Windows 服务

如何以编程方式在 Windows 中安装驱动器?

如何以编程方式找出载波信号强度

如何以编程方式找出打开了哪种位置模式?