识别当前域控制器名称

本文关键字:控制器 域控 识别 | 更新日期: 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();