Как получить имя текущего пользователя 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]);