Получить отображаемое имя текущего пользователя домена Windows из командной строки - PullRequest
9 голосов
/ 18 октября 2011

Как из командной строки получить понятное отображаемое имя (то есть «Джон Доу» вместо «john.doe») пользователя домена, который в данный момент вошел в систему?

Ответы [ 8 ]

10 голосов
/ 18 октября 2011

Вот хитрый способ, который я сделал, используя команду net и команду find в командном файле:

set command=net user "%USERNAME%" /domain | FIND /I "Full Name"

FOR /F "tokens=1 delims=" %%A in ('%command%') do SET fullNameText=%%A
set fullName=%fullNameText:Full Name=%
for /f "tokens=* delims= " %%a in ("%fullName%") do set fullName=%%a

В первой строке хранится команда, которую мы хотим выполнить, в переменной.Он извлекает имя пользователя из переменных среды и передает его в команду net user, а также в параметр /domain, чтобы сообщить ему о необходимости извлечения из текущего домена.Затем он передает результат из этого, который представляет собой набор данных о текущем пользователе, в метод find, который извлекает только то свойство, которое нам нужно.Результат поиска находится в формате «Полное имя Джон Доу».Вторая строка выполнит команду и поместит результат в переменную fullNameText.Третья строка удалит часть «Полное имя» результата и в итоге получит «Джон Доу».Четвертая строка с циклом for удалит все первые пробелы из результата, и вы получите «John Doe» в переменной fullName.

4 голосов
/ 10 мая 2014

Вот производная от ответа скелетанка , который немного чище, который работал для меня ... (Я попробовал ответ скелетанка , и он не работал для меня так, как он был написан,таким образом, мой ответ ниже.)

SET TNAME="net user %USERNAME% /domain| FIND /I "Full Name""
FOR /F "tokens=3,4 delims=, " %%A IN ('%TNAME%') DO SET DNAME=%%B %%A

Тогда вы можете использовать «DNAME» везде, где вам нужно, вывести с выводом или подтвердить с помощью оператора «IF».Вы можете перевернуть токены «%% B» и «%% A», чтобы вернуться к раскладке фамилии.Это экономит дополнительные усилия, использованные в оригинальном ответе *1009* skeletank.

Переменные: - TNAME = Временное имя- DNAME = Отображаемое имя

-Спасибо skeletank .

3 голосов
/ 11 января 2016

Ответ Lectrode в одной строке будет выглядеть так:

for /f "usebackq tokens=2,* delims= " %%a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b
2 голосов
/ 07 января 2016

Принятый ответ (на момент публикации) состоит из 4 строк кода, когда вам нужен только один, чтобы сделать то же самое:

for /f "tokens=2*" %n in ('net user "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o"

Это будет работать, даже если полное имя имеет более 2частей.Работает на рабочих станциях Windows "из коробки" и не требует прав администратора.

ПРИМЕЧАНИЕ. Не забудьте изменить значения %n и %o на %%n и %%o соответственно при использовании впакетный файл.

Объяснение команды:

"tokens=2* указывает, что единственные токены, на которые он будет обращать внимание, это 2-й токен (назначенный %n)и все после него (назначается следующей букве: %o)

По умолчанию delims - это пробел, поэтому нам не нужно его определять, но если нам нужно определить его вручную, он будетбыть следующим: "tokens=2* delims= ".Поскольку пробел является разделителем, он будет игнорировать все начальные пробелы.

Канал (|) экранируется морковью (^), что говорит командному процессору игнорировать его изначально.

Я также предпочитаю использовать FINDSTR вместо FIND, потому что (в моем тестировании) я обнаружил, что это более быстрая команда, которая может иметь значение, если вы часто ее используете.FINDSTR /C:"Full Name" можно легко заменить на FIND "Full Name", если вы предпочитаете.

2 голосов
/ 23 мая 2014

Это должен быть чистый способ использования dsquery и dsget без использования вывода «Полное имя», которое зависит от языка, тогда как «fn», похоже, работает с версиями Windows на разных языках.

for /F "tokens=2" %i in ('dsquery user -samid %username% ^| dsget user -L -fn ^| find "fn:"') DO @echo %i

Переключатель dsget -L выдает указанный вывод "fn: USER", поэтому остается только захватить второй столбец в выводе.find "fn:" используется для избавления от вывода "dsget success".

0 голосов
/ 20 марта 2018

Из удаленной командной строки (обычно я устанавливаю это с помощью PSexec.exe), затем просто введите «запрос пользователя»

enter image description here

0 голосов
/ 20 июля 2015

Если вы хотите, чтобы он использовался человеком - то есть вам не нужно автоматически его анализировать, чтобы вы получили просто полное имя - вы можете просто набрать net user <username> /domain в командной строке и прочитатьПоле «Полное имя».

Ссылка: Получение подробной информации о пользователе домена из командной строки .

0 голосов
/ 22 августа 2013

Я создал командный файл, чтобы быстро сделать несколько вещей, выбрав действие, используя set p и goto.Я оставляю ненужные части.

@echo off

:begin

echo 5. Find who is on remote PC right now

echo.

set /p a=

IF %a%==5 (goto whoson)

REM Whos on
:whoson
set /p remotecomputername=Enter computer name to see the current user: 
wmic /node:%remotecomputername% computersystem get username
pause
goto begin

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...