@PeterMortensen, я не думаю, что тема супер связана с этим. Один из них - об использовании .NET, а другой - об использовании cmd API. Помимо того факта, что они оба хотят одну и ту же информацию, есть, конечно, тонны других API, которые также делают схожие вещи
KyleMit,
Ответы:
202
Вы можете использовать переменную username: %USERNAME%
Это хороший ответ, но есть некоторые оговорки. Если я войду whoami, я получу desktop-machine\bballdave025. Есть две части, видимые через: 1) echo %USERNAME%результат bballdave025; 2) echo %USERDOMAIN%результат DESKTOP-MACHINE. Я полагаю, можно сказать, что «полное имя пользователя» доступно через echo %USERDOMAIN%\%USERNAME%(этот результат DESKTOP-MACHINE\bballdave025соответствует совпадению whoami, игнорируя регистр) или даже через echo %USERNAME%@%USERDOMAIN%результат bballdave025@DESKTOP-MACHINE. Все зависит от того, что нужно пользователю (для нас, ОП) , т.е. важна ли доменная часть.
bballdave025
46
Это должно быть в %USERNAME%. Очевидно, что это может быть легко подделано, поэтому не полагайтесь на это в целях безопасности.
Полезный совет: введите setв командной строке список всех переменных среды.
Ответ зависит от того, на каком языке «сценария командной строки» вы находитесь.
Cmd
В старой cmd.exeкомандной строке или в .batили.cmd сценарии вы можете использовать следующее:
%USERNAME% - Получает только имя пользователя.
%USERDOMAIN% - Получает домен пользователя.
PowerShell
В командной строке PowerShell .ps1или .psm1сценарии a или вы можете использовать следующее:
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name- Дает вам полное имя пользователя (например, домен \ имя пользователя). Это также самый безопасный метод, потому что он не может быть переопределен пользователем, как другие $Envпеременные ниже.
Это отличный ответ, так как этот вопрос зависит от «оболочки». Есть много оболочек, которые вы можете использовать с Windows. Не только CMD. В наши дни большинство людей перешли на PowerShell, а есть и другие. stackoverflow.com/questions/17349022/…
G_Style
5
% 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
Я использую этот метод при написании командных файлов для тестирования.
echo %userdomain%\%username%
Поскольку вы должны включить пароль в виде обычного текста, если требуется аутентификация, я буду использовать его только в полностью закрытой среде, где другие пользователи не смогут его просмотреть, или если пользователь, увидев пароль, не будет иметь последствий.
Меня всегда раздражало, что в Windows нет более полезных небольших утилит для написания сценариев Unix, таких как who / whoami , sed и AWK . В любом случае, если вам нужно что-то надежное, получите Visual Studio Express и скомпилируйте следующее:
Я согласен, что sed & awk был бы полезен, но это дает вам 50% пути: net config Workstation | find "User name"
the_mandrill
9
whoamiдоступно начиная с Windows Vista.
Джои
2
Правда, утилита whoami включена в Vista. Для XP он находится в инструментах поддержки SP2, а для W2K - в наборе ресурсов.
RealHowTo
4
В большинстве случаев переменная% USERNAME% будет именно тем, что вам нужно.
echo %USERNAME%
Однако если вы используете командную оболочку с повышенными привилегиями,% USERNAME% сообщит имя администратора вместо вашего собственного имени пользователя. Если вы хотите узнать последнее, запустите:
for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u
В стандартном контексте каждый подключенный пользователь содержит процесс explorer.exe: команда [tasklist / V | find "explorer"] возвращает строку, содержащую владельца процесса explorer.exe, с адаптированным регулярным выражением можно получить требуемый стоимость. Это также отлично работает под Windows 7.
В редких случаях файл explorer.exe заменяется другой программой, фильтр поиска можно адаптировать к этому случаю. Если команда возвращает пустую строку, вероятно, ни один пользователь не вошел в систему. В Windows 7 также можно запустить [запрос сеанса | найти ">"].
Чтобы найти ответ BlueBearr наилучшим образом (хотя я запускаю свой пакетный скрипт, например, с правами SYSTEM), я должен что-то добавить к нему. Поскольку в моей языковой версии для Windows (польском) строка, которая должна быть поймана с помощью "%% a %% b" == "Имя пользователя:", становится ОЧЕНЬ СЛОЖНОЙ (она содержит некоторые диакритические знаки на моем языке), я пропускаю первые 7 строк и оперировать 8-м.
@for /f "SKIP= 7 TOKENS=3,4 DELIMS=\ " %%G in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do @IF %%G==%COMPUTERNAME% set _currdomain_user=%%H
Ответы:
Вы можете использовать переменную username:
%USERNAME%
источник
Имя пользователя:
Доменное имя:
Вы можете получить полный список переменных среды, запустив команду
set
из командной строки.источник
Просто используйте эту команду в командной строке
источник
whoami
, я получуdesktop-machine\bballdave025
. Есть две части, видимые через: 1)echo %USERNAME%
результатbballdave025
; 2)echo %USERDOMAIN%
результатDESKTOP-MACHINE
. Я полагаю, можно сказать, что «полное имя пользователя» доступно черезecho %USERDOMAIN%\%USERNAME%
(этот результатDESKTOP-MACHINE\bballdave025
соответствует совпадениюwhoami
, игнорируя регистр) или даже черезecho %USERNAME%@%USERDOMAIN%
результатbballdave025@DESKTOP-MACHINE
. Все зависит от того, что нужно пользователю (для нас, ОП) , т.е. важна ли доменная часть.Это должно быть в
%USERNAME%
. Очевидно, что это может быть легко подделано, поэтому не полагайтесь на это в целях безопасности.Полезный совет: введите
set
в командной строке список всех переменных среды.источник
%USERNAME%
является правильным ответом в пакетном и других средах Windows.Другим вариантом является использование
%USERPROFILE%
для получения пути пользователя, напримерC:\Users\username
.источник
Ответ зависит от того, на каком языке «сценария командной строки» вы находитесь.
Cmd
В старой
cmd.exe
командной строке или в.bat
или.cmd
сценарии вы можете использовать следующее:%USERNAME%
- Получает только имя пользователя.%USERDOMAIN%
- Получает домен пользователя.PowerShell
В командной строке PowerShell
.ps1
или.psm1
сценарии a или вы можете использовать следующее:[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
- Дает вам полное имя пользователя (например, домен \ имя пользователя). Это также самый безопасный метод, потому что он не может быть переопределен пользователем, как другие$Env
переменные ниже.$Env:Username
- Получает только имя пользователя.$Env:UserDomain
- Получает домен пользователя.$Env:ComputerName
- Получает имя компьютера.источник
% USERNAME% выдаст вам имя пользователя текущего запущенного процесса. В зависимости от того, как вы запускаете ваш пакетный файл, это не обязательно совпадает с именем текущего пользователя. Например, вы можете запускать пакетный файл через запланированное задание, из службы и т. Д.
Вот более надежный способ получения имени пользователя, вошедшего в систему в данный момент, путем удаления имени пользователя, запустившего задачу explorer.exe:
источник
Я использую этот метод при написании командных файлов для тестирования.
Поскольку вы должны включить пароль в виде обычного текста, если требуется аутентификация, я буду использовать его только в полностью закрытой среде, где другие пользователи не смогут его просмотреть, или если пользователь, увидев пароль, не будет иметь последствий.
Надеюсь, это поможет кому-то.
источник
Меня всегда раздражало, что в Windows нет более полезных небольших утилит для написания сценариев Unix, таких как who / whoami , sed и AWK . В любом случае, если вам нужно что-то надежное, получите Visual Studio Express и скомпилируйте следующее:
И просто используйте это в вашем командном файле.
источник
net config Workstation | find "User name"
whoami
доступно начиная с Windows Vista.В большинстве случаев переменная% USERNAME% будет именно тем, что вам нужно.
Однако если вы используете командную оболочку с повышенными привилегиями,% USERNAME% сообщит имя администратора вместо вашего собственного имени пользователя. Если вы хотите узнать последнее, запустите:
источник
В этом основное отличие переменной username от команды whoami:
источник
В стандартном контексте каждый подключенный пользователь содержит процесс explorer.exe: команда [tasklist / V | find "explorer"] возвращает строку, содержащую владельца процесса explorer.exe, с адаптированным регулярным выражением можно получить требуемый стоимость. Это также отлично работает под Windows 7.
В редких случаях файл explorer.exe заменяется другой программой, фильтр поиска можно адаптировать к этому случаю. Если команда возвращает пустую строку, вероятно, ни один пользователь не вошел в систему. В Windows 7 также можно запустить [запрос сеанса | найти ">"].
источник
Чтобы найти ответ BlueBearr наилучшим образом (хотя я запускаю свой пакетный скрипт, например, с правами SYSTEM), я должен что-то добавить к нему. Поскольку в моей языковой версии для Windows (польском) строка, которая должна быть поймана с помощью "%% a %% b" == "Имя пользователя:", становится ОЧЕНЬ СЛОЖНОЙ (она содержит некоторые диакритические знаки на моем языке), я пропускаю первые 7 строк и оперировать 8-м.
источник