2010-03-23 6 views
6

Tengo una lista de los identificadores de seguridad del usuario y necesito obtener una lista de los nombres de UserPrincipalName ... ¿hay alguna forma de que pueda obtenerlo sin cargar los usuarios DirectoryEntry e ingresar la propiedad userPrincipalName?Dado el SID de un usuario, ¿cómo obtengo su userPrincipalName?

necesito el método más eficiente posible porque esto se hace mucho

Respuesta

-1

Usted puede conseguir esto usando el método LookupAccountSid() de llamar a Win32. Hay un código de muestra en la página a la que he vinculado que muestra un ejemplo simple.

6

Si tiene .NET 3.5, consulte este excelente artículo de MSDN Managing Directory Security Principals in the .NET Framework 3.5.

Muestra las nuevas capacidades de búsqueda mejoradas del espacio de nombres System.DirectoryServices.AccountManagement de .NET 3.5.

Una buena característica es el método FindByIdentity, que le permite encontrar un usuario (o grupo) basado en una identidad, ya sea el nombre principal del usuario, el nombre completo, un GUID o el SID, simplemente funcionará :

UserPrincipal user = 
    UserPrincipal.FindByIdentity(principalContext, 
           IdentityType.Sid, (value)); 

usted necesita para asegurarse de proporcionar el SID en el formato adecuado - véase la documentación de MSDN para obtener más información.

Una vez que tenga el objeto principal de usuario, acaba de obtener su nombre de usuario principal:

if(user != null) 
{ 
    string upn = user.UserPrincipalName; 
} 

El código de ejemplo para el artículo incluso tiene dos métodos auxiliares adicionales FindByIdentityGuid y FindByIdentitySid para lograr exactamente lo que está buscando !

Ve a verlo y úsala.

+0

Desafortunadamente estoy atrapado en .Net 2.0, pero es bueno saber que esto existe para cuando lo actualicemos. Gracias –

Cuestiones relacionadas