[英]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.