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
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.
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.
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. –
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
Xong nó, bởi một chút về lập trình sáng tạo,
Enum Keys trong HKEY_USERS cho những phím số buồn cười ...
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 ...
mở Reg HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \
tạo ra một vòng lặp để có được tất cả các subkeys
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)
Bắt đầu với [S-1-5-21-12] là tất cả người dùng địa phương
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.
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
for /f "tokens=8 delims=\" %a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist" ^| find "UsrClass.dat"') do echo %a
Bạn có thể muốn sử dụng thẻ 'đánh dấu'' để định dạng ví dụ mã này :) – summea
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
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
Chính xác những gì tôi cần. Cảm ơn! – modz0r
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