识别当前域控制器名称

时间:2011-04-15 00:08:59

标签: c#

我正在尝试通过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"]);
            }

任何人都知道更好的方法吗?

1 个答案:

答案 0 :(得分:2)

当然,您需要包含用户和密码,但这应该可以解决问题:

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

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