繁体   English   中英

"如何获取用户名@域格式的当前 Windows 用户名?"

[英]How do I get the current windows user's name in username@domain format?

我知道以下函数以域\\用户名格式返回当前 Windows 用户名。

Convert.ToString( WindowsIdentity.GetCurrent().Name );

像这样的东西应该工作......

string[] temp = Convert.ToString(WindowsIdentity.GetCurrent().Name).Split('\\');
string userName = temp[1] + "@" + temp[0];

您可以使用\\作为分隔符拆分名称,然后反转顺序,如下所示:

string[] splitName = WindowsIdentity.GetCurrent().Name.Split('\\');
//check that splitName contains at least 2 values before using
string name = (splitName.Length > 1) ? splitName[1] + "@" + splitName[0] : null;

重要的是要注意,需要双反斜杠\\\\ ,因为反斜杠是一个特殊字符。 我们在上面的例子中添加第二个反斜杠来转义特殊字符并将其用作常规字符。

var input =  WindowsIdentity.GetCurrent().Name ;
string[] tab = input.Split('\\');
var result = tab[1] + "@" +  tab[0];

Domain\\user name格式获取Domain\\user name并解析它的所有代码在所有情况下都不起作用。 答案是您必须调用Active Directory才能获取用户主体名称。 事实证明,我不能依赖桌面上安装的Active Directory,因为许多警察部门不会在他们的笔记本电脑上安装目录,以防警察在警察不在车内时被盗。 (谈论勇敢,从警车偷走电脑!)

我们已针对我们的情况提出了自己的解决方案。 我们以Domain\\user name格式将用户名存储在我们的数据库中。 程序启动时,它会检查当前的Windows用户名(格式是否相同)是否在数据库中。 如果是,则程序将该用户用作当前用户并运行。 如果当前Windows用户不在我们的数据库中,则该程序将回退到我们之前的代码。

这样,用户可以使用任何格式的用户名登录计算机,并通过Windows进行身份验证。 我们的程序始终以相同的格式获取用户名,并始终以该格式检查用户名。 Windows对用户进行身份验证,而不是我们。

使用

System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName

这将返回当前用户的UPN。 需要对System.DirectoryServices.AccountManagement的引用。

沿着这些方向的东西。

var nameParts = WindowsIdentity.GetCurrent().Name.Split(@"\");
string name = nameParts.Length == 1 
    ? nameParts  
    : string.format("{0}@{1}",nameParts[1],nameParts[0]);

我已经看到了很多相同的变体,为什么不把它放到一个函数中,比如:

string GetUserName()
{
    var currentName =  WindowsIdentity.GetCurrent()?.Name;
    if (string.IsNullOrEmpty(currentName)) return null;
    var nameSplit = currentName.Split(@"\");
    string name = (nameSplit.Length > 1)
                    ? $"{nameSplit[1]}@{nameSplit[0]}" : currentName;
    return name;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM