识别当前域控制器名称
本文关键字:控制器 域控 识别 | 更新日期: 2023-09-27 17:50:10
我试图通过c#获得当前域控制器名称。此代码将不会在登录会话期间运行。它在机器启动期间运行,所以我不能使用%logonserver%变量,因为在机器启动时没有这样的东西。在这里搜索我认为下面的代码将工作,但它返回主域控制器,而不是当前登录服务器。(在启动时,"登录服务器"最好被称为"身份验证服务器")
这对我不起作用(不返回机器的当前DC,返回Domain的PDC)
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
string controller = context.ConnectedServer;
Console.WriteLine("Domain Controller: " + controller);
}
我发现下面的WMI查询得到了积极的结果,但是,它很慢:
managentobjectsearcher新的ManagementObjectSearcher("根' CIMV2","SELECT * FROM Win32_NTDomain");
foreach (ManagementObject queryObj in searcher.Get())
{
if (queryObj["DomainControllerName"] != "")
Console.WriteLine("DomainControllerName: {0}", queryObj["DomainControllerName"]);
}
有谁知道更好的方法吗?
虽然您需要包含用户名和密码,但这应该可以达到目的:
DirectoryContext domainContext = new DirectoryContext(DirectoryContextType.Domain, "targetDomainName", "validUserInDomain", "validUserPassword");
var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
var controller = domain.FindDomainController();