Как вы находите текущего пользователя в среде Windows? - PullRequest
143 голосов
/ 22 октября 2009

При запуске сценария командной строки можно ли получить имя текущего пользователя? ОС Windows XP.

Ответы [ 12 ]

184 голосов
/ 22 октября 2009

Вы можете использовать переменную username: %USERNAME%

79 голосов
/ 22 октября 2009

Имя пользователя:

echo %USERNAME%

имя_домен:

echo %USERDOMAIN%

Вы можете получить полный список переменных среды, запустив команду set из командной строки.

56 голосов
/ 26 ноября 2013

Просто используйте эту команду в командной строке

C:\> whoami
44 голосов
/ 22 октября 2009

Должно быть в %USERNAME%. Очевидно, что это может быть легко подделано, поэтому не полагайтесь на это в целях безопасности.

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

14 голосов
/ 29 января 2014

%USERNAME% - правильный ответ в пакетном режиме и в других средах Windows.

Другой вариант - использовать %USERPROFILE% для получения пути пользователя, например C:\Users\username.

4 голосов
/ 27 октября 2009

% USERNAME% вернет вам имя пользователя запущенного в данный момент процесса. В зависимости от того, как вы запускаете ваш пакетный файл, это не обязательно совпадает с именем текущего пользователя. Например, вы можете запускать пакетный файл через запланированное задание, из службы и т. Д.

Вот более надежный способ получения имени пользователя, вошедшего в систему, путем удаления имени пользователя, запустившего задачу explorer.exe:

for /f "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do if /i "%%a %%b"=="User Name:" set _currdomain_user=%%c
for /f "TOKENS=1,2 DELIMS=\" %%a in ("%_currdomain_user%") do set _currdomain=%%a & set _curruser=%%b
4 голосов
/ 22 октября 2009

Меня всегда раздражает, что в Windows нет некоторых более полезных небольших утилит для сценариев Unix, таких как who / whoami , sed и AWK . В любом случае, если вам нужно что-то надежное, получите Visual Studio Express и скомпилируйте следующее:

#include <windows.h>
#include <stdio.h>

int main(int argc, char **argv) {
    printf("%s", GetUserName());
}

И просто используйте это в вашем командном файле.

3 голосов
/ 19 апреля 2017

В большинстве случаев, переменная% USERNAME% будет тем, что вы хотите.

echo %USERNAME%

Однако, если вы используете командную оболочку с повышенными привилегиями,% USERNAME% сообщит имя администратора вместо вашего собственного имени пользователя. Если вы хотите узнать последнее, запустите:

for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u
3 голосов
/ 07 апреля 2013

Я использую этот метод при написании командных файлов для тестирования.

echo %userdomain%\%username%

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

Надеюсь, это кому-нибудь поможет.

1 голос
/ 11 февраля 2019

Ответ зависит от того, на каком языке «сценария командной строки» вы находитесь.

Cmd

В старой командной строке cmd.exe или в сценарии .bat или .cmd вы можете использовать следующее:

%USERNAME% - Получает только имя пользователя.

%USERDOMAIN% - получает домен пользователя.

PowerShell

В командной строке PowerShell или сценарии .ps1 или .psm1 вы можете использовать следующее:

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name - дает вам полное имя пользователя (например, домен \ имя пользователя). Это также самый безопасный метод, потому что он не может быть переопределен пользователем, как другие переменные $Env ниже.

$Env:Username - Получает только имя пользователя.

$Env:UserDomain - получает домен пользователя.

$Env:ComputerName - получает имя компьютера.

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