使用principalcontext支持多个OU

时间:2015-02-27 12:27:15

标签: c# active-directory

我一直试图通过提供容器来获取用户

string domain = "mydomain.com.pk";
string container = "ou=dotnet,ou=qa,dc=mydomain,dc=com,dc=pk";

using(var context = new PrincipalContext(ContextType.Domain, "192.168.0.150:389", container, domain + "\\salman.zafar", "password")) {
    string userPrincipalName = "user1" + "@" + domain;

    // validate the credentials
    bool isValid = context.ValidateCredentials(userPrincipalName, "password");
    if (isValid) {
        UserPrincipal up = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, userPrincipalName);
        Console.WriteLine(up.Enabled);
        Console.WriteLine(up.Name);
        Console.WriteLine(up.EmailAddress);
        Console.WriteLine(up.DisplayName);
    }
}

现在层次结构就像这样

  

mydomain.com.pk
  DOTNET
  QA

现在,如果我提供:     string container =“ou = qa,dc = mydomain,dc = com,dc = pk”;

它运作完美,但我的要求是支持OU 当我尝试:

string container = "ou=dotnet,ou=qa,dc=mydomain,dc=com,dc=pk";

我收到错误:there is no such object on the server.

有人可以帮助我如何在容器中提供多个OU吗?如果可能,他们不是彼此的孩子。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为dotnet组织单位应该是qa组织单位的子项,并且您的用户应该在dotnet OU中,以便能够使用您提供的容器。 或者只是尝试将容器更改为以下以支持您当前的层次结构。

string container = "ou=qa,ou=dotnet,dc=mydomain,dc=com,dc=pk";

换句话说,你需要在路径上冒泡。如果您在路径中指定用户,它将如下所示:

string container = "cn=user,ou=qa,ou=dotnet,dc=mydomain,dc=com,dc=pk";