如何获取已登录Windows用户的名字和姓氏?

Dat*_*ase 38 c# active-directory

如何在我的系统中使用c#获取我的名字姓氏(使用Active Directory用户名和密码登录Windows)?

是否有可能在不去AD的情况下做到这一点?

Jac*_*itt 56

如果您使用的是.Net 3.0或更高版本,那么有一个可爱的库可以实现这一点.System.DirectoryServices.AccountManagement有一个UserPrincipal对象可以得到你正在寻找的东西,你不必乱用LDAP或放弃系统调用来做到这一点.这就是它的全部内容:

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;
}
Run Code Online (Sandbox Code Playgroud)

注意:如果您已经拥有用户名,则实际上并不需要主体,但如果您在用户上下文中运行,那么从那里开始就可以轻松实现.

  • 似乎在.NET 3.5中引入了[`PrincipalContext`](http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.principalcontext.aspx) (5认同)
  • 我发现这不起作用,直到我先调用它:`Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);` (3认同)
  • 就像一个注释一样,除非您使用AD域管理员凭据连接到AD,否则此答案和下面的Shivakant将无法解决. (2认同)

小智 48

有一种更简单的方法可以做到这一点:

using System.DirectoryServices.AccountManagement;

UserPrincipal userPrincipal = UserPrincipal.Current;
String name = userPrincipal.DisplayName;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • ASP.NET 用户要当心。在调试器中,它返回了预期的信息,但在部署到 IIS 时它返回了应用程序池 ID 的名称。 (2认同)

Par*_*Par 9

这个解决方案对我不起作用,但这个功能很有用:

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

你应该这样称呼它:

GetUserFullName(Environment.UserDomainName, Environment.UserName);
Run Code Online (Sandbox Code Playgroud)

(在这里找到).

  • 等等,"这个解决方案"是什么意思.如果你的意思是你自己的答案,那你为什么发布它?如果您的意思是另一种解决方案,请澄清哪一个. (3认同)