2010-05-27 56 views
33

Có cách nào để kết nối giữa các giá trị dưới HKEY_USERS với tên người dùng thực tế không?
Tôi đã thấy một số câu hỏi tương tự, nhưng hầu hết (nếu không phải tất cả) nói về mã C#, và nhu cầu của tôi là trong VBScript.Lấy tên người dùng từ các giá trị HKEY_USERS

Trả lời

51

Nếu bạn nhìn vào một trong các phím sau:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

Bạn có thể tìm thấy một danh sách các SID đó với giá trị khác nhau, bao gồm cả nơi họ "đường về nhà" trong đó bao gồm tên người dùng của họ.

Tôi không chắc chắn điều này đáng tin cậy như thế nào và tôi sẽ không khuyên bạn nên lộn xộn về điều này trừ khi bạn thực sự chắc chắn những gì bạn đang làm.

+0

Chính xác những gì tôi cần. Cảm ơn! – modz0r

+9

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ hivelist dường như chỉ là người dùng hiện đang đăng nhập trên mỗi hệ thống (Xp - 7) Tôi đã xem xét ... Và tôi sẽ không xem xét HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \ \ ProfileImagePath một cách đáng tin cậy để xác định tên người dùng (Xem http://support.microsoft.com/kb/2454362). – user66001

20

Có thể truy vấn thông tin này từ WMI. Lệnh sau sẽ xuất ra một bảng có một hàng cho mỗi người dùng cùng với SID cho mỗi người dùng.

wmic useraccount get name,sid 

Bạn cũng có thể xuất thông tin này để CSV:

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

Tôi đã sử dụng này trên Vista và 7. Để biết thêm thông tin, xem WMIC - Take Command-line Control over WMI.

+0

Thật không may, các SID tôi nhận được không khớp với các giá trị dưới HKEY_USERS trên Windows 7 x64. –

+0

Có thể một SID hợp pháp dường như vắng mặt vì tổ chức của người dùng cụ thể đó không được tải ngay tại thời điểm đó.'Runas/profile/user: mong muốn somearbitrarycommand' sẽ tải nó. – amonroejj

0

Xong nó, bởi một chút về lập trình sáng tạo,

  1. Enum Keys trong HKEY_USERS cho những phím số buồn cười ...

  2. Enum các phím trong HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \

và bạn sẽ tìm thấy những con số giống nhau .... Bây giờ trong những chìa khóa nhìn vào giá trị string: ProfileImageP ATH = "someValue", nơi các giá trị là một trong hai:

"% systemroot% \ system32 \ config \ systemprofile" ... không quan tâm đến điều này một ... như không phải là một con đường thư mục của nó ...

% SystemDrive% \ Documents and Settings \ LocalService - "Dịch vụ địa phương" % SystemDrive% \ Documents and Settings \ NetworkService "NETWORK SERVICE"

hoặc

% SystemDrive% \ Documents and Settings \ USER_NAME, mà dịch trực tiếp đến các giá trị "USERNAME" trong hầu hết các hệ thống không giả mạo, nghĩa là. nơi người dùng đã không thay đổi tên người dùng của họ sau một vài tuần hoặc thay đổi đường dẫn một cách rõ ràng ...

+2

""% systemroot% \ system32 \ config \ systemprofile "... vì nó không phải là đường dẫn thư mục ..." không chính xác. Hãy thử c & p này vào hộp thoại chạy. – user66001

+0

(Đã xác nhận đang hoạt động trên WinXP + 7) – user66001

11
  1. mở Reg HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \

  2. tạo ra một vòng lặp để có được tất cả các subkeys

  3. những khóa bạn quan tâm với được những bắt đầu với [ S-1-5-21-] có nghĩa là người dùng (xem tên khóa [ProfileImagePath] họ luôn bắt đầu bằng đường dẫn c: \ Users)

  4. Bắt đầu với [S-1-5-21-12] là tất cả người dùng địa phương

  5. Bắt đầu với [S-1-5-21-13] là tất cả người dùng mạng [nếu tham gia vào Mạng được đăng ký] trước đây đã đăng nhập trên máy.

+4

3 chứa lỗi và không tư vấn khôn ngoan. [ProfileImagePath] không phải bắt đầu bằng đường dẫn c: \ Users ... Xem https://www.google.com/#hl=vi&tbo=d&output=search&sclient=psy-ab&q=move+windows+7+ thư mục người dùng +; Ngoài ra, như những người khác đã nhận xét về chủ đề này và được đề cập bởi @spade nếu người dùng/quản trị viên đã thay đổi tên người dùng và đăng nhập tài khoản người dùng, tên thư mục hồ sơ sẽ không còn khớp với tên người dùng (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

Bạn có thể muốn sử dụng thẻ 'đánh dấu'' để định dạng ví dụ mã này :) – summea

2

Bạn có thể sử dụng PSGetSid lệnh từ nhóm SysInternals của Microsoft.

Tải URL: http://technet.microsoft.com/en-gb/sysinternals/bb897417.aspx

Cách sử dụng:

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. 

Ví dụ:

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

NB:

  • Trong trường hợp người dùng là một miền/AD (LDAP) sử dụng , chạy trên bất kỳ tính toán nào er trên tên miền sẽ cho kết quả tương tự.
  • Trong trường hợp người dùng ở địa phương với máy, lệnh sẽ được chạy trên máy đó hoặc bạn nên chỉ định máy tính thông qua tham số tùy chọn.

Cập nhật

Nếu bạn sử dụng PowerShell, sau đây có thể hữu ích cho việc giải quyết bất kỳ người dùng AD niêm yết:

#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}} 

Bạn cũng có thể tinh chỉnh các SID lọc hơn nữa để chỉ rút lại các SID đó sẽ giải quyết thành tài khoản AD nếu bạn muốn; thêm về cấu trúc SID ở đây: https://technet.microsoft.com/en-us/library/cc962011.aspx

2

Bằng cách tìm kiếm cho userid của tôi trong registry, tôi thấy

HKEY_CURRENT_USER\Volatile Environment\Username 
Các vấn đề liên quan