Как получить имя текущего пользователя windows в формате username@domain?

Я знаю, что следующая функция возвращает имя текущего пользователя Windows в формате domainusername.

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

но как получить имя пользователя в ?

EDIT:

я отвечаю в этом редактировании, поскольку каждый, кто ответил, имеет ту же основную идею.

из того, что мне дали понять, разбирая имя из domainusername формат и построение его как username@domain не безопасно или не рекомендуется. Я верю, что это так. потому что нет никакой гарантии, что два доменных имени одинаковы в разных форматах. Например, в компании, где я работаю,domain часть domainusername формат основан на deparment, но в username@domain, это название компании. Это то, что требует поиска DNS.

Я надеялся, что есть API, который сделал этот поиск DNS. Думаю, я должен был поместить эту информацию в свой первоначальный вопрос. Извиняюсь.

6 ответов


что-то вроде этого должно работать...

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

var input =  WindowsIdentity.GetCurrent().Name ;
string[] tab = input.Split('\');
var result = tab[1] + "@" +  tab[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;

важно отметить, что двойная обратная косая черта \ требуется, потому что обратная косая черта является специальным символом. Мы добавляем вторую обратную косую черту в приведенном выше примере, чтобы избежать специального символа и использовать его как обычный символ.


весь код, чтобы взять имя в Domain\user name format и parse он не будет работать во всех ситуациях. Ответ вы должны сделать запросы к Active Directory для получения основного имени пользователя. Оказывается, я не могу полагаться на Active Directory, установленный на рабочем столе, так как многие полицейские департаменты не устанавливают каталог на своих ноутбуках в случае его кражи, пока полицейский не находится в машине. (Кстати, о наглеце, который украл компьютер из полицейской машины!)

мы придумали собственное решение для нашей ситуации. Мы храним имена пользователей в нашей базе данных в . Когда программа запускается, она проверяет, находится ли текущее имя пользователя windows (в том же формате) в базе данных. Если это так, программа использует этого пользователя в качестве текущего пользователя и запускается. Если текущего пользователя Windows нет в нашей базе данных, программа возвращается к предыдущему коду.

таким образом, пользователь может войти в машину, используя любой формат для их имени пользователя и они аутентифицируются с помощью Windows. Наша программа всегда получает имя пользователя в одном формате и всегда проверяет имя пользователя в этом формате. Windows проверяет подлинность пользователя, а не нас.


использовать

System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName

Это возвращает UPN текущего пользователя. Требуется ссылка на систему.DirectoryServices.Бухгалтерия.


что-то в этом роде.

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