2010-08-12 6 views

Répondre

47

Si vous utilisez .Net 3.0 ou supérieur, il y a une jolie bibliothèque qui le fait pratiquement écrire lui-même. System.DirectoryServices.AccountManagement a un objet UserPrincipal qui obtient exactement ce que vous recherchez et vous n'avez pas besoin de vous tromper avec LDAP ou de passer aux appels système pour le faire. Voici tout ce qu'il prendrait:

Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
WindowsPrincipal principal = (WindowsPrincipal)Thread.CurrentPrincipal; 
// or, if you're in Asp.Net with windows authentication you can use: 
// WindowsPrincipal principal = (WindowsPrincipal)User; 
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain)) 
{ 
    UserPrincipal up = UserPrincipal.FindByIdentity(pc, principal.Identity.Name); 
    return up.DisplayName; 
    // or return up.GivenName + " " + up.Surname; 
} 

Remarque: vous n'avez pas réellement besoin principal si vous avez déjà le nom d'utilisateur, mais si vous êtes en cours d'exécution dans le contexte de l'utilisateur, il est tout aussi facile de tirer de Là.

+0

qu'en est-il de .Net2? –

+0

Mise à niveau? Oui, je sais, inutile. Pardon. Je n'ai jamais été satisfait des cerceaux que vous avez dû traverser pour obtenir des informations sur AD dans les versions antérieures du cadre. –

+5

['PrincipalContext'] (http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.principalcontext.aspx) semble avoir été introduit dans .NET 3.5 –

8

Cette solution ne fonctionne pas pour moi, mais cette fonction a très bien fonctionné:

public static string GetUserFullName(string domain, string userName) 
     { 
      DirectoryEntry userEntry = new DirectoryEntry("WinNT://" + domain + "/" + userName + ",User"); 
      return (string)userEntry.Properties["fullname"].Value; 
     } 

Vous devriez appeler ainsi:

GetUserFullName(Environment.UserDomainName, Environment.UserName); 

(Je l'ai trouvé here).

+0

Attendez, que voulez-vous dire par "cette solution". Si vous voulez dire votre propre réponse, pourquoi l'avez-vous posté? Si vous vouliez une autre solution, veuillez préciser laquelle. – TylerH

42

Il est un moyen plus facile de le faire:

using System.DirectoryServices.AccountManagement; 

UserPrincipal userPrincipal = UserPrincipal.Current; 
String name = userPrincipal.DisplayName; 

enter image description here

Questions connexes