我正在寻找一种方法来确定客户端计算机连接到的给定域的域控制器的名称/ IP地址。
在我们公司,我们有很多小网络用于测试,大多数网络都有自己的小网域。例如,其中一个域名为“TESTLAB”。我有一个Windows XP工作站,它是TESTLAB域的成员,我试图弄清楚域控制器的名称,以便我可以去看看为域定义了哪些用户。在我们的实验室中有Windows Server 2000和Windows Server 2003的混合(实际上可能有几个NT 4服务器),所以找到一个适合两者的解决方案会很不错。
在Internet上看,它看起来有各种实用程序,例如Windows Power Shell或nltest,但这些都需要您下载并安装其他实用程序。我希望找到一种方法来找到域控制器,而无需安装任何额外的东西。
编辑如果我想编写一个程序来查找域控制器或当前域中的用户,我该怎么做呢?
用最简单的编程语言:DOS批处理
echo %LOGONSERVER%
在Windows上的cmd中,键入以下命令:
nltest /dclist:{domainname}
它列出了特定域中的所有域控制器
在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);
}
}
}
}
从命令行查询logonserver env变量。
C:> SET L
LOGONSERVER = '\' \ DCNAME
在Windows命令提示符下运行gpresult
。您将获得有关当前域,当前用户,用户和计算机安全组,组策略名称,Active Directory可分辨名称等的大量信息。
在Powershell中:$ env:logonserver
要在机器不属于的域中存在DomainController
时检索信息,您需要更多信息。
DirectoryContext domainContext = new DirectoryContext(DirectoryContextType.Domain, "targetDomainName", "validUserInDomain", "validUserPassword");
var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
var controller = domain.FindDomainController();