validar usuario servidor password obtener funcional ejemplos datos crear conectar con autenticacion active c# active-directory directoryservices

c# - usuario - Cómo obtener los atributos de Active Directory no representados por la clase UserPrincipal



obtener datos usuario active directory c# (3)

En este caso, debe ir un nivel más profundo (de nuevo a las entrañas de DirectoryEntry ) al tomarlo del principio del usuario:

DirectoryEntry de = (myUser.GetUnderlyingObject() as DirectoryEntry); if(de != null) { // go for those attributes and do what you need to do }

Lo que quiero decir es que ahora mismo estoy usando System.DirectoryServices.AccountManagement y si uso la clase UserPrincipal solo veo el nombre, el segundo nombre, etc.

así que en mis códigos me gusta

UserPrincipal myUser = new UserPrincipal(pc); myUser.Name = "aaaaaa"; myUser.SamAccountName = "aaaaaaa"; . . . . myUser.Save();

¿Cómo vería el atributo como móvil o información?


La forma correcta de hacerlo es utilizando PrincipalExtensions donde extiende el Principal que busca y utiliza los métodos ExtensionSet y ExtensionGet como se explica here .


up.Mobile sería perfecto, pero desafortunadamente, no existe tal método en la clase UserPrincipal, por lo que debe cambiar a DirectoryEntry llamando a .GetUnderlyingObject() .

static void GetUserMobile(PrincipalContext ctx, string userGuid) { try { UserPrincipal up = UserPrincipal.FindByIdentity(ctx, IdentityType.Guid, userGuid); DirectoryEntry up_de = (DirectoryEntry)up.GetUnderlyingObject(); DirectorySearcher deSearch = new DirectorySearcher(up_de); deSearch.PropertiesToLoad.Add("mobile"); SearchResultCollection results = deSearch.FindAll(); if (results != null && results.Count > 0) { ResultPropertyCollection rpc = results[0].Properties; foreach (string rp in rpc.PropertyNames) { if (rp == "mobile") Console.WriteLine(rpc["mobile"][0].ToString()); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }