我正在尝试通过c#获取当前的域控制器名称。在登录会话期间不会运行此代码。它在机器启动期间运行,所以我不能使用%logonserver%变量,因为在机器启动时没有这样的东西。在这里搜索我认为以下代码可以工作,但它返回主域控制器,而不是当前的登录服务器。 (在启动时,'登录服务器'可能最好称为'验证服务器')
这对我不起作用(不返回机器的当前DC,返回Domain的PDC)
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
string controller = context.ConnectedServer;
Console.WriteLine("Domain Controller: " + controller);
}
我发现以下WMI查询获得了积极的结果,但速度很慢:
ManagementObjectSearcher searcher = 新的ManagementObjectSearcher(“root \ CIMV2”, “SELECT * FROM Win32_NTDomain”);
foreach (ManagementObject queryObj in searcher.Get())
{
if (queryObj["DomainControllerName"] != "")
Console.WriteLine("DomainControllerName: {0}", queryObj["DomainControllerName"]);
}
任何人都知道更好的方法吗?
答案 0 :(得分:2)
当然,您需要包含用户和密码,但这应该可以解决问题:
DirectoryContext domainContext = new DirectoryContext(DirectoryContextType.Domain, "targetDomainName", "validUserInDomain", "validUserPassword");
var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
var controller = domain.FindDomainController();