Windows 환경에서 현재 사용자를 어떻게 찾습니까?


159

명령 줄 스크립트를 실행할 때 현재 사용자의 이름을 얻을 수 있습니까?



@ PeterMortensen, 나는 스레드가 이것과 관련이 있다고 생각하지 않습니다. 하나는 .NET 사용에 관한 것이고 다른 하나는 cmd API 사용에 관한 것 입니다. 둘 다 같은 정보를 원하는 사실 이외에, 또한 비슷한 일 할 다른 API의 톤이 확실히있다
KyleMit

답변:


202

username 변수를 사용할 수 있습니다 : %USERNAME%


90

사용자 이름:

echo %USERNAME%

도메인 이름:

echo %USERDOMAIN%

set명령 프롬프트에서 명령 을 실행하여 전체 환경 변수 목록을 얻을 수 있습니다 .


모든 환경 변수에 대한 추가 정보는 이것이 훌륭한 확장 답변입니다.
bballdave025

63

명령 프롬프트에서이 명령을 사용하십시오.

C:\> whoami

이것은 좋은 대답이지만 몇 가지주의 사항이 있습니다. 입력 whoami하면을 얻습니다 desktop-machine\bballdave025. 다음과 같은 두 부분이 있습니다. 1) echo %USERNAME%, 결과 bballdave025; 2) echo %USERDOMAIN%결과 DESKTOP-MACHINE. '완전한 사용자 이름'이 echo %USERDOMAIN%\%USERNAME%(이 결과,, 대소 문자를 무시하고 DESKTOP-MACHINE\bballdave025일치 whoami) 또는 심지어 echo %USERNAME%@%USERDOMAIN%, result 를 통해 사용할 수 있다고 말할 수 있습니다 bballdave025@DESKTOP-MACHINE. 그것은 모두 사용자 (우리에게는 OP)에게 필요한 것 , 즉 도메인 부분이 중요한지에 달려 있습니다.
bballdave025

46

에 있어야합니다 %USERNAME%. 분명히 이것은 쉽게 스푸핑 될 수 있으므로 보안을 위해 의존하지 마십시오.

유용한 팁 : set명령 프롬프트에 입력하면 모든 환경 변수가 나열됩니다.


2
'넷 구성 워크 스테이션 | "사용자 이름"을 찾으십시오. 주석은 매우 유용합니다. 그것은 단지 의견이 아니라 답변이되어야합니다
Alpay

17

%USERNAME% 배치 및 기타 Windows 환경에서 정답입니다.

다른 옵션은 다음 %USERPROFILE%과 같이 사용자의 경로를 얻는 데 사용 하는 것 C:\Users\username입니다.


6

대답은 사용중인 "명령 줄 스크립트"언어에 따라 다릅니다.

Cmd

이전에 cmd.exe명령 프롬프트 또는에서 .bat또는 .cmd스크립트, 다음을 사용할 수 있습니다 :

%USERNAME% -사용자 이름 만 가져옵니다.

%USERDOMAIN% -사용자의 도메인을 가져옵니다.

PowerShell

PowerShell 명령 프롬프트 또는 .ps1또는 .psm1스크립트에서 다음을 사용할 수 있습니다.

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name-정규화 된 사용자 이름 (예 : Domain \ Username)을 제공합니다. $Env아래 의 다른 변수 와 같이 사용자가 재정의 할 수 없으므로 가장 안전한 방법 입니다.

$Env:Username -사용자 이름 만 가져옵니다.

$Env:UserDomain -사용자의 도메인을 가져옵니다.

$Env:ComputerName -컴퓨터 이름을 가져옵니다.


이 질문은 '쉘'에 의존하기 때문에 훌륭한 답변입니다. 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

4

테스트를 위해 배치 파일을 작성할 때이 방법을 사용합니다.

echo %userdomain%\%username%

인증이 필요한 경우 비밀번호를 일반 텍스트로 포함해야하므로 다른 사용자가 비밀번호를 볼 수 없거나 비밀번호를 보는 사용자가 아무런 영향을 미치지 않는 완전히 개인 환경에서만 비밀번호를 사용합니다.

이것이 누군가를 돕기를 바랍니다.


4

Windows에 who / whoami , sedAWK 와 같은 유닉스의 유용한 스크립트 유틸리티가 없는지 항상 귀찮습니다 . 어쨌든, 확실한 것을 원하면 Visual Studio Express를 가져 와서 다음을 컴파일하십시오.

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

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

그리고 배치 파일에서 사용하십시오.


예, 내장되어 있으면 좋을 것입니다.
Geo

8
sed & awk가 유용 할 것이라는 데 동의하지만, 이렇게하면 50 %의 효과를 얻을 수 있습니다. net config Workstation | find "User name"
the_mandrill

9
whoamiWindows Vista부터 사용할 수 있습니다.
Joey

2
사실, whoami 유틸리티는 Vista에 포함되어 있습니다. XP의 경우 SP2 지원 도구에 있으며 W2K의 경우 리소스 툴킷에 있습니다.
RealHowTo

4

대부분의 경우 % USERNAME % 변수는 원하는 것입니다.

echo %USERNAME%

그러나 관리자 권한 cmd 셸을 실행중인 경우 % USERNAME %은 (는) 자신의 사용자 이름 대신 관리자 이름을보고합니다. 후자를 알고 싶다면 다음을 실행하십시오.

for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u

1

이것은 username 변수와 whoami 명령의 주요 차이점입니다.

C:\Users\user.name>echo %username%
user.name

C:\Users\user.name>whoami
domain\user.name

DOMAIN = bios name of the domain (not fqdn)

0

표준 컨텍스트에서 연결된 각 사용자는 explorer.exe 프로세스를 보유합니다. [tasklist / V | find "explorer"] 명령은 explorer.exe 프로세스 소유자가 포함 된 행을 반환합니다. 값. 이것은 Windows 7에서도 완벽하게 실행됩니다.

드문 경우지만 explorer.exe가 다른 프로그램으로 바뀌면 찾기 필터를이 경우에 맞게 조정할 수 있습니다. 명령이 빈 줄을 반환하면 로그온 한 사용자가없는 것입니다. Windows 7에서는 [query session | find ">"]를 실행할 수도 있습니다.


0

BlueBearr 응답이 가장 좋은 한 (예 : SYSTEM 권한으로 배치 스크립트를 실행하는 동안) 무언가를 추가해야합니다. "%% a %% b"== "사용자 이름 :"에 의해 잡히는 Windows 언어 버전 (폴란드어) 줄에서 실제로 완료됩니다 (내 언어에는 발음 구별 부호가 포함되어 있음). 처음 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.