извлекать данные пользователя из активного каталога с помощью C # - PullRequest
2 голосов
/ 02 мая 2019

Я хочу получить данные о конкретном пользователе.Я знаю путь OU этого пользователя, но не могу получить информацию, используя этот путь OU.Это всегда говорит, что пользователь не найден.Может кто-нибудь сказать мне, что мне нужно изменить поисковый фильтр.Пожалуйста помоги .

Код

путь пользователя abc.ds.xyz.net/fGroup/xcxc/Users/123456 abc.ds.xyz.net - это домен, тогда fGroup - это OU, xcxc - это OU,Users - OU, 123456 - cn.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.DirectoryServices;
    using System.DirectoryServices.AccountManagement;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Drawing;
    using System.Windows.Forms;

    namespace Ldap_authentication
    {
       public class Program
       {
         static void Main(string[] args)
         {

            Console.Write("Enter user: ");
            String username = Console.ReadLine();

            try
            {
              DirectoryEntry myLdapConnection = createDirectoryEntry();

              DirectorySearcher search = new DirectorySearcher(myLdapConnection);
              search.Filter = "(&(OU=fGroup)(OU=xcxc )(OU=Users)(cn=" + username + "))";
              SearchResult result = search.FindOne();

              if (result != null)
              {

                ResultPropertyCollection fields = result.Properties;

                foreach (String ldapField in fields.PropertyNames)
                {

                    foreach (Object myCollection in fields[ldapField])
                        Console.WriteLine(String.Format("{0,-20} : {1}",
                                      ldapField, myCollection.ToString  ()));
                }
             }

             else
             {
                // user does not exist  
                Console.WriteLine("User not found!");
                Console.ReadLine();
             }
         }

        catch (Exception e)
        {
            Console.WriteLine("Exception caught:\n\n" + e.ToString());
             Console.ReadLine();
        }


    }
    static DirectoryEntry createDirectoryEntry()
    {
        DirectoryEntry ldapConnection = new DirectoryEntry("abc.ds.xyz.net");
        ldapConnection.Path = "LDAP://DC=abc,DC=ds,DC=xyz,DC=net";
        ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
        return ldapConnection;
    }
   }
  }

EDIT

    search.Filter = "(&(OU=fGroup))";
    SearchResult result = search.FindOne();

, когда я меняю search.Filter = "(& (OU = fGroup) (OU = xcxc) (OU =Пользователи) (cn = "+ username +")) ";into search.Filter = "(& (OU = fGroup))";Я получаю результат.Может кто-нибудь сказать мне, как искать с несколькими фильтрами ввода поиска.

1 Ответ

3 голосов
/ 02 мая 2019

После нескольких часов удара головой о стену я наконец нашел ответ.Мне нужно написать несколько поисковых фильтров, таких как

Старый код search.Filter = "(& (OU = fGroup))";замените это этим

   search.Filter = "(&(OU=fGroup))";
   search.Filter = "(&(OU=xcxc))";
   search.Filter = "(&(OU=Users))";
   search.Filter = "(&(cn=" + username + "))";
   SearchResult result = search.FindOne();

   Finally found my answer :) . Happy Coding guys :)
...