使用C#代码从Active Directory获取当前登录名

Sun*_*ari 27 .net c# active-directory

如何使用C#代码从Windows Active Directory获取当前用户的登录名?

Ahm*_*eim 55

只是,

string Name = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()).Identity.Name;
Run Code Online (Sandbox Code Playgroud)

要么

string Name = System.Environment.UserName  
Run Code Online (Sandbox Code Playgroud)

要么

string Name = Environment.GetEnvironmentVariable("USERNAME");
Run Code Online (Sandbox Code Playgroud)

要么

string Name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Run Code Online (Sandbox Code Playgroud)

工作:)

  • 并且没有任何涉及AD在这里完全无用(它不跟踪当前用户是谁 - 在登录AD之后在会话期间没有真正被要求太多). (9认同)
  • 我有一个网站,我试图获取登录用户的用户名到Windows,以上没有一个给我这个:/ (7认同)
  • 非常感谢.我一直在搜索. (3认同)
  • @Sunil您尚未检查我的答案,有什么我可以帮助您的吗? (2认同)

mar*_*c_s 31

如果您使用的是.NET 3.5及更高版本,则可以使用:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find current user
UserPrincipal user = UserPrincipal.Current;

if(user != null)
{
   string loginName = user.SamAccountName; // or whatever you mean by "login name"
}    
Run Code Online (Sandbox Code Playgroud)

新的S.DS.AM使得在AD中与用户和群组玩游戏变得非常容易!

参考文献:

  • @OleAlbers:在这种特殊情况下 - 你不需要它.如果您想通过某个名称搜索用户 - 那么您需要上下文. (5认同)
  • 你需要什么'PrincipalContext ctx = new PrincipalContext(ContextType.Domain);'for,when"ctx"以后不用? (4认同)
  • @ user1306094:这适用于任何具有Active Directory的环境. (3认同)
  • @ user1306094:正如我已经说过的那样 - 当**有一个Active Directory时,它可以工作**.如果AD不在那里,就没有办法让这项工作成功.不清楚为什么/你的意思*在不同的服务器* - 它使用默认的Active Directory**DOMAIN** - 它没有绑定到特定的服务器 (3认同)
  • 这适用于客户端服务器环境 (2认同)