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());
}
}