以编程方式确定当前域控制器

aba*_*hev 7 .net c# active-directory domaincontroller domainservices

我需要查询当前的域控制器,可能是主要的更改用户密码.

(P)DC名称应该是完全合格的,即DC=pdc,DC=example,DC=com(如何正确命名这种表示法?)

如何使用C#完成?

Bre*_*tra 5

DomainController在机器不属于的域中存在时检索信息,您需要更多信息.

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

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
Run Code Online (Sandbox Code Playgroud)


aba*_*hev 2

(需要 System.DirectoryServices.AccountManagement.dll):

using (var context = new System.DirectoryServices.AccountManagement.PrincipalContext(ContextType.Domain))
{
    string server = context.ConnectedServer; // "pdc.examle.com"
    string[] splitted = server.Split('.'); // { "pdc", "example", "com" }
    IEnumerable<string> formatted = splitted.Select(s => String.Format("DC={0}", s));// { "DC=pdc", "DC=example", "DC=com" }
    string joined = String.Join(",", formatted); // "DC=pdc,DC=example,DC=com"

    // or just in one string

    string pdc = String.Join(",", context.ConnectedServer.Split('.').Select(s => String.Format("DC={0}", s)));
}
Run Code Online (Sandbox Code Playgroud)