Comment puis-je obtenir le nom d’utilisateur actuel dans .NET en utilisant C #?

Comment puis-je obtenir le nom d’utilisateur actuel dans .NET en utilisant C #?

ssortingng userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

Si vous êtes dans un réseau d’utilisateurs, le nom d’utilisateur sera différent:

 Environment.UserName - Will Display format : 'Username' 

plutôt que

 System.Security.Principal.WindowsIdentity.GetCurrent().Name - Will Display format : 'NetworkName\Username' 

Choisissez le format que vous voulez.

Essayez la propriété: Environment.UserName .

La documentation pour Environment.UserName semble être un peu contradictoire:

Propriété Environment.UserName

Sur la même page, il est écrit:

Obtient le nom d’utilisateur de la personne actuellement connectée au système d’exploitation Windows.

ET

affiche le nom d’utilisateur de la personne qui a démarré le thread en cours

Si vous testez Environment.UserName à l’aide de RunAs, il vous donnera le nom du compte d’utilisateur RunAs, et non l’utilisateur à l’origine connecté à Windows.

Utilisation:

 System.Security.Principal.WindowsIdentity.GetCurrent().Name 

Ce sera le nom de connexion.

J’appuie totalement les autres réponses, mais j’aimerais souligner une autre méthode qui dit

 Ssortingng UserName = Request.LogonUserIdentity.Name; 

La méthode ci-dessus m’a renvoyé le nom d’utilisateur au format: NomDomaine \ NomUtilisateur . Par exemple, EUROPE \ UserName

Ce qui est différent de:

 Ssortingng UserName = Environment.UserName; 

Qui s’affiche dans le format: Nom d’utilisateur

Et enfin:

 Ssortingng UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

qui a donné: NT AUTHORITY\IUSR (lors de l’exécution de l’application sur le serveur IIS) et DomainName\UserName (lors de l’exécution de l’application sur un serveur local).

Vous pouvez également essayer d’utiliser:

 Environment.UserName; 

Comme ça…:

 ssortingng j = "Your WindowsXP Account Name is: " + Environment.UserName; 

J’espère que cela a été utile.

J’ai essayé plusieurs combinaisons de réponses existantes, mais elles me donnaient

 DefaultAppPool IIS APPPOOL IIS APPPOOL\DefaultAppPool 

J’ai fini par utiliser

 ssortingng vUserName = User.Identity.Name; 

Ce qui m’a donné le nom d’utilisateur du domaine des utilisateurs uniquement.

Utilisez System.Windows.Forms.SystemInformation.UserName pour l’utilisateur actuellement connecté, car Environment.UserName renvoie toujours le compte utilisé par le processus en cours.

J’ai essayé toutes les réponses précédentes et j’ai trouvé la réponse sur MSDN après qu’aucune de ces solutions ne fonctionnait pour moi. Voir ‘UserName4’ pour le bon pour moi.

Je suis après l’ utilisateur connecté , comme indiqué par:

  

Voici une petite fonction que j’ai écrite pour les essayer toutes. Mon résultat est dans les commentaires après chaque ligne.

 protected ssortingng GetLoggedInUsername() { ssortingng UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // Gives NT AUTHORITY\SYSTEM Ssortingng UserName2 = Request.LogonUserIdentity.Name; // Gives NT AUTHORITY\SYSTEM Ssortingng UserName3 = Environment.UserName; // Gives SYSTEM ssortingng UserName4 = HttpContext.Current.User.Identity.Name; // Gives actual user logged on (as seen in ) ssortingng UserName5 = System.Windows.Forms.SystemInformation.UserName; // Gives SYSTEM return UserName4; } 

L’appel de cette fonction renvoie le nom d’utilisateur connecté par retour.

Mise à jour: je tiens à souligner que l’exécution de ce code sur mon instance de serveur local indique que le nom d’utilisateur4 renvoie “” (une chaîne vide), mais que UserName3 et UserName5 renvoient l’utilisateur connecté. Juste quelque chose à prendre en compte.

Voici le code (mais pas en C #):

 Private m_CurUser As Ssortingng Public ReadOnly Property CurrentUser As Ssortingng Get If Ssortingng.IsNullOrEmpty(m_CurUser) Then Dim who As System.Security.Principal.IIdentity = System.Security.Principal.WindowsIdentity.GetCurrent() If who Is Nothing Then m_CurUser = Environment.UserDomainName & "\" & Environment.UserName Else m_CurUser = who.Name End If End If Return m_CurUser End Get End Property 

Voici le code (maintenant aussi en C #):

 private ssortingng m_CurUser; public ssortingng CurrentUser { get { if(ssortingng.IsNullOrEmpty(m_CurUser)) { var who = System.Security.Principal.WindowsIdentity.GetCurrent(); if (who == null) m_CurUser = System.Environment.UserDomainName + @"\" + System.Environment.UserName; else m_CurUser = who.Name; } return m_CurUser; } } 

essaye ça

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem"); ManagementObjectCollection collection = searcher.Get(); ssortingng username = (ssortingng)collection.Cast().First()["UserName"]; 

maintenant ça a l’air mieux

Pour une application Windows Forms qui devait être dissortingbuée à plusieurs utilisateurs, dont la plupart se connectaient via vpn, j’avais essayé plusieurs méthodes qui fonctionnaient toutes pour le test de ma machine locale, mais pas pour d’autres. Je suis tombé sur un article de Microsoft que j’ai adapté et fonctionne.

 using System; using System.Security.Principal; namespace ManageExclusion { public static class UserIdentity { // concept borrowed from // https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx public static ssortingng GetUser() { IntPtr accountToken = WindowsIdentity.GetCurrent().Token; WindowsIdentity windowsIdentity = new WindowsIdentity(accountToken); return windowsIdentity.Name; } } } 

Juste au cas où quelqu’un recherchera le nom d’affichage de l’ utilisateur par opposition au nom d’utilisateur , comme moi.

Voici le régal:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

Ajoutez une référence à System.DirectoryServices.AccountManagement dans votre projet.

Récupère le nom d’utilisateur Windows actuel:

 using System; class Sample { public static void Main() { Console.WriteLine(); // < -- Keep this information secure! --> Console.WriteLine("UserName: {0}", Environment.UserName); } } 

Au cas où cela User.Identity.Name.Subssortingng(4); utile pour les autres, lorsque j’ai mis à jour une application de l’application c # .net 3.5 vers Visual Studio 2017, cette ligne de code User.Identity.Name.Subssortingng(4); jeté cette erreur ” startIndex ne peut pas être plus long que la longueur de la chaîne ” (cela ne s’est pas passé avant).

Il était heureux quand je l’ai changé pour System.Security.Principal.WindowsIdentity.GetCurrent().Name cependant j’ai fini par utiliser Environment.UserName; pour obtenir l’utilisateur Windows connecté et sans la partie de domaine.