programing

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

muds 2023. 6. 15. 22:10
반응형

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

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

사용자 이름 변수를 사용할 수 있습니다.%USERNAME%

사용자 이름:

echo %USERNAME%

도메인 이름:

echo %USERDOMAIN%

명령을 실행하여 환경 변수의 전체 목록을 가져올 수 있습니다.set명령 프롬프트에서 선택합니다.

명령 프롬프트에서 이 명령 사용

C:\> whoami

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

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

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

다른 옵션은 다음과 같이 사용자의 경로를 가져오는 데 사용할 수 있습니다.C:\Users\username.

정답은 현재 사용 중인 "명령줄 스크립트" 언어에 따라 달라집니다.

cmd

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

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

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

파워셸

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

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

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

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

$Env:ComputerName시스템의 이름을 가져옵니다.

모든 셸

whoami사용자의 도메인 및 사용자 이름을 "domain\username" 형식으로 가져옵니다.

이는 Windows뿐만 아니라 Unix 시스템에서도 작동하므로 크로스 플랫폼 솔루션으로 적합합니다.

%USERNAME%은(는) 현재 실행 중인 프로세스의 사용자 이름을(%USERNAME%)배치 파일을 실행하는 방법에 따라 현재 사용자의 이름과 다를 수 있습니다.예를 들어 예약된 작업, 서비스 등을 통해 배치 파일을 실행할 수 있습니다.

explector.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%

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

이것이 누군가에게 도움이 되기를 바랍니다.

대부분의 경우 %USERNAME% 변수가 원하는 값이 됩니다.

echo %USERNAME%

그러나 상승된 cmd 셸을 실행하는 경우 %USERNAME%가 사용자 이름 대신 관리자 이름을 보고합니다.후자를 알고 싶으면 다음을 실행합니다.

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

Windows에 who/whoami, sed AWK와 같은 유닉스의 더 유용한 작은 스크립팅 유틸리티가 없는 것은 항상 짜증나는 일입니다.어쨌든, 완벽한 것을 원한다면 Visual Studio Express에서 다음을 컴파일하십시오.

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

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

배치 파일에 사용하면 됩니다.

냥입 력그를 입력하세요.whoami명령 프롬프트에서 현재 사용자 이름을 얻을 수 있습니다.

사용자 이름 변수와 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)

파워셸(file.ps1)을 통해 다음을 사용합니다.

$username = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

도메인\에 있는 사용자의 이름을 반환합니다.사용자 이름" 형식입니다.만약 당신이 단지 사용자 이름을 원한다면 그냥 쓰세요.

$username = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.Split("\")[1]

장점은 윈도우 10 윈도우 8 서버 2016과 연동된다는 것입니다.제 기억으로는 Win7 등의 다른 OS에서도 사용할 수 있는 것으로 기억합니다. (구형이 아님) 그리고 네, 배치를 통해 간단히 사용할 수 있습니다.

 $username = &whoami

표준 컨텍스트에서 연결된 각 사용자는 explor.exe 프로세스를 보유합니다.[tasklist /V|find "explorer"] 명령은 explorer.exe 프로세스 소유자의 것을 포함하는 줄을 반환하며, 적합한 정규식을 사용하여 필요한 값을 얻을 수 있습니다.이는 Windows 7에서도 완벽하게 실행됩니다.

드문 경우지만 탐색기입니다.exe가 다른 프로그램으로 대체되면 찾기 필터가 이 경우에 맞게 조정될 수 있습니다.명령이 빈 줄을 반환하면 로그온한 사용자가 없을 수 있습니다.Windows 7에서는 [쿼리 세션|find ">"]를 실행할 수도 있습니다.

BlueBearr 응답이 가장 좋다고 생각하는 한(예: 시스템 권한으로 배치 스크립트를 실행하는 동안) 여기에 무언가를 추가해야 합니다.%%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

언급URL : https://stackoverflow.com/questions/1607271/how-do-you-find-the-current-user-in-a-windows-environment

반응형