buscar por samaccountname con comodines
Frecuentes
Visto 18,819 veces
8
Tengo este codigo:
public static DataTable ExecutesAMAccountNameQuery(string sAMAccountName)
{
string filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" + sAMAccountName + "))";
return ExecuteADQuery("GC:", filter);
}
Solo funciona con el nombre de usuario completo, no conozco la sintaxis para que funcione con comodines, como un LIKE en sql.
Muchas Gracias
1 Respuestas
27
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 / ADUser 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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# active-directory or haz tu propia pregunta.
Solo mantengo un código existente, así que no quiero estropear mucho el código que me enviaste, sin embargo, con esto supongo que puedo poner * al principio y al final y también debería funcionar. - luis valencia
así: sAMAccountName=*" + sAMAccountName + "*) - luis valencia
@EstebanV.: de acuerdo a esto parece que debería funcionar, sí. - marc_s
Esta respuesta muestra el script .vbs que realiza una consulta comodín por sAMAccountName. stackoverflow.com/a/17025882/185565 - A quien
Documentación de MSDN de consulta por ejemplo vale la pena hacer referencia - maulik modi