2010-05-27 4 views
33

HKEY_USERS 아래의 값과 실제 사용자 이름을 연결하는 방법이 있습니까?
몇 가지 비슷한 질문을 보았지만 대부분 (전부는 아닐지라도)이 C# 코드에 대해 이야기하고 있으며 필자의 필요성은 VBScript에 있습니다.HKEY_USERS 값에서 사용자 이름 가져 오기

답변

51

다음 키 중 하나를 보면 :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

당신은 자신의 사용자 이름을 포함한다 그들의 "홈 경로"등 다양한 가치와 거기의 SID의 목록을 찾을 수 있습니다.

나는 이것이 얼마나 신뢰할 수 있는지 잘 모르겠다. 당신이하고있는 일을 정말로 확신하지 않는 한, 나는 이것에 대해 망설이지는 않을 것입니다.

+0

을 발견했다. 감사! – modz0r

+9

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ hivelist는 내가 본 모든 시스템 (Xp - 7)에서 현재 로그인 한 사용자 인 것 같습니다 ... 그리고 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \ \ ProfileImagePath 신뢰할 수있는 사용자 이름 확인 방법 (http://support.microsoft.com/kb/2454362 참조). – user66001

20

WMI에서이 정보를 쿼리 할 수 ​​있습니다. 다음 명령은 각 사용자에 대한 행과 함께 각 사용자의 SID와 함께 테이블을 출력합니다.

wmic useraccount get name,sid 

또한 CSV이 정보를 내보낼 수 있습니다 내가 비스타에서이를 사용하고있다

wmic useraccount get name,sid /format:csv > output.csv 

자세한 내용은 7. WMIC - Take Command-line Control over WMI를 참조하십시오.

+0

불행히도 SID가 Windows 7 x64의 HKEY_USERS 아래 값과 일치하지 않습니다. –

+0

특정 사용자의 하이브가 바로 그 순간에로드되지 않기 때문에 합법적 인 SID가 겉으로는 없어 질 수 있습니다.'Runas/profile/user : desireduser somearbitrarycommand' 명령이이를 로딩합니다. – amonroejj

0

마이크로 소프트 \ WINDOWS \ ... 그 재미 숫자 키 위해, 창조적 인 프로그램의 비트에 의해, HKEY_LOCAL_MACHINE \ 소프트웨어에서

  • 열거 키를 HKEY_USERS에

    1. 열거 키를 그것을 완료 NT \ CurrentVersion을 \ ProfileList

    와 같은 번호를 .... 이제 그 키에 문자열 값을보고 찾을 수 \ ProfileImageP를 값이 하나 있습니다 ATH = "someValue와"

    "으로 % systemroot % \ system32 \ config \ systemprofile"... 그 아닌 디렉토리 경로 등이 하나 ...에 관심이

    % 시스템 드라이브의 %의 \ 문서 및 설정 \ LocalService를 - "로컬 서비스" % 시스템 드라이브의 %의 \ 문서 및 설정 \ NetworkService와 "네트워크 서비스"

    또는

    %의 시스템 드라이브의 %의 \ 문서 및 변환 설정 \ USER_NAME, 대부분의 un-tampered 시스템에서 직접 "사용자 이름"값으로 이동합니다. 사용자가 몇 주 후에 사용자 이름을 변경하거나 경로를 명시 적으로 변경하지 않은 경우

  • +2

    ""% systemroot % \ system32 \ config \ systemprofile "... 디렉토리 경로가 아닙니다 ..."가 잘못되었습니다. 실행 대화 상자로이 작업을 시도해보십시오. – user66001

    +0

    (WinXP + 7에서 확인 된 작업) – user66001

    11
    1. 열기 등록 HKEY_LOCAL_MACHINE \ 소프트웨어 마이크로 소프트 \ 윈도우 \ NT \ CurrentVersion을 \ ProfileList

    2. 는 당신이 그와 함께 시작됩니다에 관심이있는 모든 하위 키

    3. 하위 키를 얻기 위해 루프를 만들 \ [ S-1-5-21-]로 시작하는 사용자 (키 이름 [ProfileImagePath] 참조)는 항상 경로 c : \ Users로 시작합니다.

    4. [S-1-5-21-12] 모든 로컬 사용자입니다

    5. [S-1-5-21-13]로 시작하는 컴퓨터는 이전에 컴퓨터에 로그온 한 모든 네트워크 사용자 [(도메인이 연결된 네트워크에 가입 된 경우)입니다.

    +4

    3에는 오류가 있으며 현명한 조언은 아닙니다. [ProfileImagePath]는 c : \ Users 경로로 시작하지 않아도됩니다 ... https://www.google.com/#hl=en&tbo=d&output=search&sclient=psy-ab&q=move+windows+7+ 사용자 + 디렉토리; 또한 다른 곳에서이 스레드에 주석을 달고 사용자/관리자가 계정 작성 및 로그인 후 사용자 이름을 변경 한 경우 @spade로 언급하면 ​​프로필 디렉토리 이름이 더 이상 사용자 이름과 일치하지 않습니다 (http://support.microsoft.com)/kb/2454362) – user66001

    0
    for /f "tokens=8 delims=\" %a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist" ^| find "UsrClass.dat"') do echo %a 
    
    +0

    이 코드 예제의 형식을 지정하기 위해'code' 마크 업 태그를 사용할 수도 있습니다 :) – summea

    2

    당신은 마이크로 소프트의 시스 인 터널 팀에서 명령 PSGetSid을 사용할 수 있습니다.

    다운로드 URL : http://technet.microsoft.com/en-gb/sysinternals/bb897417.aspx

    사용법 :

    psgetsid [\\computer[,computer[,...] | @file] [-u username [-p password]]] [account|SID] 
    -u Specifies optional user name for login to remote computer. 
    -p Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password. 
    Account PsGetSid will report the SID for the specified user account rather than the computer. 
    SID PsGetSid will report the account for the specified SID. 
    Computer Direct PsGetSid to perform the command on the remote computer or computers specified. If you omit the computer name PsGetSid runs the command on the local system, and if you specify a wildcard (\\*), PsGetSid runs the command on all computers in the current domain. 
    @file PsGetSid will execute the command on each of the computers listed in the file. 
    

    예 :

    psgetsid S-1-5-21-583907252-682003330-839522115-63941 
    

    NB :

    사용자가 도메인/AD입니다
    • (LDAP) 사용자 어떤 컴퓨터에서도 이것을 실행 도메인에서 동일한 결과를 가져야합니다.
    • 사용자가 컴퓨터에 로컬 인 경우 해당 컴퓨터에서 명령을 실행하거나 선택적 매개 변수를 통해 컴퓨터를 지정해야합니다.

    업데이트

    당신이 PowerShell을 사용하는 경우, 다음은 어떤 AD 사용자가 나열된 해결에 유용 할 수 있습니다

    #create a drive for HKEY USERS: 
    New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue 
    
    #List all immediate subfolders 
    #where they're a folder (not a key) 
    #and they's an SID (i.e. exclude .DEFAULT and SID_Classes entries) 
    #return the SID 
    #and return the related AD entry (should one exist). 
    Get-ChildItem -Path 'HKU:\' ` 
    | ?{($_.PSIsContainer -eq $true) ` 
    -and ($_.PSChildName -match '^S-[\d-]+$')} ` 
    | select @{N='SID';E={$_.PSChildName}} ` 
    , @{N='Name';E={Get-ADUser $_.PSChildName | select -expand Name}} 
    

    당신은 또한 SID 만에 더 필터링 수정 수 당신이 원한다면 AD 계정으로 해결할 SID를 다시 가져 오십시오. 여기 SID 구조에 대한 자세한 : https://technet.microsoft.com/en-us/library/cc962011.aspx

    2

    레지스트리에서 내 사용자 ID를 검색하여, 나는 내가 필요 정확히 무엇을

    HKEY_CURRENT_USER\Volatile Environment\Username