buscar por samaccountname con comodines

Tengo este codigo:

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

It only works with the full username, I dont know the syntax to make it work with wildcards, like a LIKE in sql?

Muchas Gracias

preguntado el 09 de marzo de 12 a las 13:03

1 Respuestas

Si está usando .NET 3.5 o más reciente, puede usar un PrincipalSearcher y un principal de "consulta por ejemplo" para realizar la búsqueda:

// 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.....          
}

Si aún no lo ha hecho, lea absolutamente el artículo de MSDN Administrar los principales de seguridad de directorios en .NET Framework 3.5 que muestra muy bien cómo aprovechar al máximo las nuevas funciones en System.DirectoryServices.AccountManagement. O ver el Documentación de MSDN sobre System.DirectoryServices.AccountManagement espacio de nombres

Por supuesto, dependiendo de sus necesidades, es posible que desee especificar otras propiedades en ese principal de usuario "consulta por ejemplo" que cree:

  • DisplayName (normalmente: nombre + espacio + apellido)
  • SAM Account Name - su nombre de cuenta de Windows / AD
  • User Principal Name - su nombre de estilo "username@yourcompany.com"

Puede especificar cualquiera de las propiedades en el UserPrincipal y utilícelos como "consulta por ejemplo" para su PrincipalSearcher.

respondido 09 mar '12, 13:03

I am only maintaining some existing code, so I dont want to mess up a lot with the code you sent me, however with this I suppose I can put * at the beginning and end and it should work also. - luis valencia

like this: sAMAccountName=*" + sAMAccountName + "*) - luis valencia

@EstebanV.: de acuerdo a esto it seems it should work, yes. - marc_s

This answer shows .vbs script doing wildcard query by sAMAccountName. stackoverflow.com/a/17025882/185565 - A quien

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.