LDAP/AD 検索を、現在ログインしているドメインのみの検索から、AD 内のすべてのドメインの検索に拡張しようとしています。このメソッドは、クエリで文字列を受け取り、LDAPInformation オブジェクトを返します。
私が尋ねている間、この方法よりも名前を検索する良い方法はありますか? 姓で人を探す場合、ワイルドカードを使用する必要があるため、ユーザーフレンドリーではありません (例: Doe*)。
public static LDAPInformation[] GetGlobalAddressListVIAName(string nameQuery)
{
var currentForest = Forest.GetCurrentForest();
var globalCatalog = currentForest.FindGlobalCatalog();
using (var searcher = globalCatalog.GetDirectorySearcher())
{
using (var entry = new DirectoryEntry(searcher.SearchRoot.Path))
{
searcher.Filter = "(&(mailnickname=*)(objectClass=user)(displayName=" + nameQuery + "))";
searcher.PropertyNamesOnly = true;
searcher.SearchScope = SearchScope.Subtree;
searcher.Sort.Direction = SortDirection.Ascending;
searcher.Sort.PropertyName = "displayName";
return searcher.FindAll().Cast<SearchResult>().Select(result => new LDAPInformation(result.GetDirectoryEntry())).ToArray();
}
}
}
オブジェクトは次のとおりです。
class LDAPInformation
{
internal LDAPInformation(DirectoryEntry entry)
{
//Section: HASH
this.sAMAccountName = (string)entry.Properties["sAMAccountName"].Value;
//Section: Email
this.Mail = (string)entry.Properties["mail"].Value;
//Section: Organziation
this.Description = (string)entry.Properties["description"].Value;
this.Company = (string)entry.Properties["company"].Value;
this.Title = (string)entry.Properties["title"].Value;
this.Department = (string)entry.Properties["department"].Value;
//Section: Name
this.DisplayName = (string)entry.Properties["displayName"].Value;
this.FirstName = (string)entry.Properties["firstName"].Value;
this.MiddleName = (string)entry.Properties["middleName"].Value;
this.LastName = (string)entry.Properties["lastName"].Value;
//Section: Address
this.StreetAddress = (string)entry.Properties["streetAddress"].Value;
this.City = (string)entry.Properties["city"].Value;
this.State = (string)entry.Properties["state"].Value;
this.PostalCode = (string)entry.Properties["postalCode"].Value;
this.TelephoneNumber = (string)entry.Properties["telephoneNumber"].Value;
}
public string DisplayName
{
get;
private set;
}
public string Mail
{
get;
private set;
}
public string sAMAccountName
{
get;
private set;
}
public string Description
{
get;
private set;
}
public string Company
{
get;
private set;
}
public string Title
{
get;
private set;
}
public string Department
{
get;
private set;
}
public string FirstName
{
get;
private set;
}
public string MiddleName
{
get;
private set;
}
public string LastName
{
get;
private set;
}
public string StreetAddress
{
get;
private set;
}
public string City
{
get;
private set;
}
public string State
{
get;
private set;
}
public string PostalCode
{
get;
private set;
}
public string TelephoneNumber
{
get;
private set;
}
}