2012-03-09 5 views
7

У меня есть этот код:поиска по SAMAccountName с групповыми символами

public static DataTable ExecutesAMAccountNameQuery(string sAMAccountName) 
     { 
      string filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" + sAMAccountName + "))"; 
      return ExecuteADQuery("GC:", filter); 
     } 

Он работает только с полным именем, я не знаю синтаксис, чтобы заставить его работать с групповыми символами, как LIKE в SQL Server?

Благодаря

ответ

22

Если вы используете .NET 3.5 или более позднюю версию, вы можете использовать PrincipalSearcher и «запрос по образцу» принципалу сделать ваш поиск:

// create your domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// define a "query-by-example" principal - here, we search for a UserPrincipal 
UserPrincipal qbeUser = new UserPrincipal(ctx); 
qbeUser.SamAccountName = "Esteban*"; 

// create your principal searcher passing in the QBE principal  
PrincipalSearcher srch = new PrincipalSearcher(qbeUser); 

// find all matches 
foreach(var found in srch.FindAll()) 
{ 
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....   
} 

Если вы убежище 't уже - абсолютно прочитал статью MSDN Managing Directory Security Principals in the .NET Framework 3.5, которая показывает, как наилучшим образом использовать новые функции в System.DirectoryServices.AccountManagement. Или см. Пространство имен MSDN documentation on the System.DirectoryServices.AccountManagement.

Конечно, в зависимости от ваших потребностей, вы можете указать другие свойства на том, что «запрос по образцу» пользователь принципала вы создаете:

  • DisplayName (обычно: первое имя + пробел + фамилия)
  • SAM Account Name - ваш Windows/AD имя учетной записи
  • User Principal Name - ваш "[email protected]" имя стиля

Вы можете Spe cify любое из свойств на UserPrincipal и использовать их как «запрос по примеру» для вашего PrincipalSearcher.

+0

Я поддерживаю только существующий код, поэтому я не хочу много разбираться с кодом, который вы мне прислали, однако я предполагаю, что могу положить * в начале и в конце, и он тоже должен работать. –

+0

вот так: sAMAccountName = * "+ sAMAccountName +" *) –

+0

@EstebanV .: [в соответствии с этим] (http://technet.microsoft.com/en-us/library/ee198823.aspx) кажется, что он должен работать , да. –