Получение имени пользователя из значений HKEY_USERS - PullRequest
37 голосов
/ 27 мая 2010

Есть ли способ соединить значения из HKEY_USERS с фактическим именем пользователя?
Я видел несколько похожих вопросов, но большинство (если не все) говорит о коде на C #, и моя потребность в VBScript.

Ответы [ 8 ]

61 голосов
/ 27 мая 2010

Если вы посмотрите на одну из следующих клавиш:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

Вы можете найти там список SID с различными значениями, в том числе, где их «домашние пути», включая их имена пользователей.

Я не уверен, насколько это надежно, и я бы не советовал возиться с этим, если вы не уверены, что делаете.

24 голосов
/ 09 июня 2011

Можно запросить эту информацию из WMI . Следующая команда выведет таблицу со строкой для каждого пользователя вместе с SID для каждого пользователя.

wmic useraccount get name,sid

Вы также можете экспортировать эту информацию в CSV:

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

Я использовал это в Vista и 7. Для получения дополнительной информации см. WMIC - Управление через командную строку через WMI .

12 голосов
/ 25 апреля 2012
  1. Открыть Reg HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \

  2. создать цикл для получения всех подразделов

  3. интересующие вас подразделы - это те, которые начинаются с [S-1-5-21-], что означает пользователя (см. Имя ключа [ProfileImagePath], они всегда начинаются с пути c: \ Users)

  4. Все, кто начинается с [S-1-5-21-12], являются локальными пользователями

  5. Те, кто начинается с [S-1-5-21-13], являются всеми пользователями сети [, если они присоединены к Domained network ], которые ранее вошли в систему на машине.

4 голосов
/ 13 сентября 2016

При поиске моего идентификатора пользователя в реестре я нашел

HKEY_CURRENT_USER\Volatile Environment\Username
3 голосов
/ 13 июня 2014

Вы можете использовать команду PSGetSid из команды Microsoft SysInternals.

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

Примечание:

  • Если пользователь является пользователем домена / 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, чтобы отозвать только те SID, которые будут преобразованы в учетную запись AD, если вы хотите; подробнее о структуре SID здесь: https://technet.microsoft.com/en-us/library/cc962011.aspx

1 голос
/ 03 декабря 2018

В HKEY_USERS\oneyouwanttoknow\ вы можете посмотреть на \Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders, и он покажет их пути к профилю. c:\users\whothisis\Desktop и т. Д.

1 голос
/ 21 мая 2013
for /f "tokens=8 delims=\" %a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist" ^| find "UsrClass.dat"') do echo %a
0 голосов
/ 07 марта 2012

Сделано, немного творческого программирования,

  1. Перечислите ключи в HKEY_USERS для этих забавных цифровых клавиш ...

  2. Перечисление ключей в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \

и вы найдете те же цифры .... Теперь посмотрите в этих ключах значение String: ProfileImagePath = "SomeValue", где значения могут быть:

"% systemroot% \ system32 \ config \ systemprofile" ... не заинтересован в этом ... так как он не путь к каталогу ...

% SystemDrive% \ Documents and Settings \ LocalService - «Локальные службы» % SystemDrive% \ Документы и настройки \ Сетевой сервис "NETWORK SERVICE"

или

% SystemDrive% \ Documents and Settings \ USER_NAME, что напрямую переводится в значения «USERNAME» в большинстве систем без изменений, т.е. где пользователь не изменил свое имя пользователя через несколько недель или явно изменил пути ...

...