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


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


20
2018-06-04 07:14


起源




答案:


只是,

string Name = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()).Identity.Name;

要么

string Name = System.Environment.UserName  

要么

string Name = Environment.GetEnvironmentVariable("USERNAME");

要么

string Name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

工作:)


39
2018-06-04 07:16



并且没有任何涉及AD在这里完全无用(它不跟踪当前用户是谁 - 在登录AD之后在会话期间没有真正被要求太多)。 - TomTom
我有一个网站,我试图获取登录用户的用户名到Windows,以上没有一个给我这个:/ - SearchForKnowledge
非常感谢。我一直在搜索。 - Marty_in_a_Box
@Sunil你取消了我的答案,我可以帮助你的任何事情? - Ahmed Ghoneim


如果您使用的是.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"
}    

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

参考文献:


25
2018-06-04 07:17



这适用于客户端服务器环境 - Sunil
@ user1306094:这适用于任何具有Active Directory的环境。 - marc_s
@ user1306094:正如我已经说过 - 它有效 什么时候 已有Active Directory。如果AD不在那里,就没有办法让这项工作成功。不清楚为什么/你的意思 在不同的服务器  - 它使用默认的Active Directory 域  - 它不依赖于特定的服务器 - marc_s
你需要什么'PrincipalContext ctx = new PrincipalContext(ContextType.Domain);'for,when“ctx”以后不用? - Ole Albers
@OleAlbers:在这种特殊情况下 - 你不需要它。如果您想通过某个名称搜索用户 - 那么您需要上下文。 - marc_s


System.DirectoryServices.AccountManagement.UserPrincipal.Current.Name

这对我也有用!谢谢


1
2017-10-01 05:43