18 Aralık 2018 Salı

DirectorySearcher Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.DirectoryServices.DirectorySearcher;
Bu sınıf her zaman using ile kullanılmalıdır.
using (DirectorySearcher ds = new DirectorySearcher())
{                
  ...
}
Constructor - Default
Filtre ve PropertiesToLoad alanları sonradan atanabilir. Şöyle yaparız.
using (DirectorySearcher ds = new DirectorySearcher())
{                
  ds.PropertiesToLoad.Add("pwdLastSet");
  ds.PropertiesToLoad.Add("lastLogon");
  ds.PageSize = 1;
  ds.Filter = string.Format("(&(objectCategory=user)(sAMAccountName={0}))",user);
  SearchResult sr = ds.FindOne(); // Find User in AD
}
Constructor - Root Entry
DirectoryEntry Sınıfı ile ilklendirilir.  Bu constuctor ile SubTree araması yapılır.
Örnek
Şöyle yaparız.
DirectoryEntry entry = ...;
DirectorySearcher dSearch = new DirectorySearcher(entry);
Örnek
 Elimizde şöyle bir location olsun.
"LDAP://OU=Users,OU=Germany,DC=XXXX,DC=de".
Şöyle yaparız.
public SearchResultCollection getAllUsers(string location)
{
  string ldapPath;

  SearchResultCollection allResults;

  try {

    ldapPath = getLdapPathFromLocation(location);

    DirectoryEntry entry = createDirectoryEntry(AD_BWFE, ldapPath);

    DirectorySearcher searcher = new DirectorySearcher(entry);

    searcher.PropertiesToLoad.Add("cn");
    searcher.PropertiesToLoad.Add("sAmAccountName");

    allResults = searcher.FindAll();

    return allResults;
   }
Filter Alanı
Örnek
Kullanıcı adına göre arama için şöyle yaparız.
String name = "ravi";
dSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + name + "))";
Örnek
Kullanıcı adına göre arama için şöyle yaparız.
string pathDomain = string.Format("LDAP://{0}",...);
DirectoryEntry entry = new DirectoryEntry(...);
try
{
  //Bind to the native AdsObject to force authentication.
  object obj = entry.NativeObject;
  DirectorySearcher search = new DirectorySearcher(entry);

  search.Filter = "(SAMAccountName=" + "UserName" + ")";
  search.PropertiesToLoad.Add("cn");
  SearchResult result = search.FindOne();
  if (null == result)
  {
     return false;
  }
}
catch (Exception ex)
{
  //"Error authenticating user on LDAP";
  ...
}
Örnek
Organizational Unit'e göre aramak yapmak için şöyle yaparız.
string organizationalUnits = "(objectCategory=organizationalUnit)";
FindAll metodu
Şöyle yaparız.
foreach (SearchResult sResultSet in dSearch.FindAll())
{...}
FindOne metodu
Şöyle yaparız.
SearchResult sr = dSearch.FindOne();
PropertiesToLoad Alanı
Şöyle yaparız.
dSearch.PropertiesToLoad.Add("pwdLastSet");
dSearch.PropertiesToLoad.Add("lastLogon");
SearchcScope Alanı
Şöyle yaparız.
dSearch.SearchScope = SearchScope.OneLevel;

Hiç yorum yok:

Yorum Gönder