web-dev-qa-db-fra.com

Obtenir le nom d'utilisateur à partir des valeurs HKEY_USERS

Existe-t-il un moyen de connecter les valeurs sous HKEY_USERS au nom d'utilisateur actuel?
J'ai vu des questions similaires, mais la plupart (sinon toutes) parlent de code C #, et mon besoin est en VBScript.

37
modz0r

Si vous regardez l'une des clés suivantes:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileListHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

Vous pouvez y trouver une liste des SID avec diverses valeurs, y compris l'endroit où se trouvent leurs "chemins d'accès", qui incluent leurs noms d'utilisateur.

Je ne sais pas à quel point c'est fiable et je ne recommanderais pas de jouer avec ça à moins d'être vraiment sûr de ce que vous faites.

61
Hans Olsson

Il est possible d'interroger ces informations à partir de WMI . La commande suivante va générer une table avec une ligne pour chaque utilisateur avec le SID pour chaque utilisateur.

wmic useraccount get name,sid

Vous pouvez également exporter ces informations au format CSV:

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

Je l'ai utilisé sous Vista et 7. Pour plus d'informations, voir WMIC - Prendre le contrôle en ligne de commande sur WMI .

23
dcharles
  1. Ouvrez Reg HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList \

  2. faire une boucle pour obtenir toutes les sous-clés

  3. les sous-clés qui vous intéressent sont celles qui ont été démarrées avec [S-1-5-21-], ce qui signifie utilisateur (voir le nom de la clé [ProfileImagePath], elles sont toujours démarrées avec un chemin c:\Users)

  4. Ceux commençant par [S-1-5-21-12] sont tous des utilisateurs locaux

  5. Ceux commençant par [S-1-5-21-13] sont tous des utilisateurs du réseau [ s'ils sont connectés à un réseau dominé ] qui ont déjà été enregistrés sur la machine.

12
Stone

En recherchant mon identifiant dans le registre, j'ai trouvé 

HKEY_CURRENT_USER\Volatile Environment\Username
4
Alan Frank

Vous pouvez utiliser la commande PSGetSid de l'équipe SysInternals de Microsoft.

URL de téléchargement: http://technet.Microsoft.com/en-gb/sysinternals/bb897417.aspx

Usage: 

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.

Exemple:

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

NB: 

  • Lorsque l'utilisateur est un utilisateur de domaine/AD (LDAP), son exécution sur n'importe quel ordinateur du domaine devrait donner les mêmes résultats.
  • Lorsque l'utilisateur est local sur la machine, la commande doit être exécutée sur cette machine ou vous devez spécifier l'ordinateur via le paramètre facultatif.

Mettre à jour

Si vous utilisez PowerShell, les éléments suivants peuvent être utiles pour résoudre les utilisateurs AD répertoriés dans la liste:

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

Vous pouvez également affiner davantage le filtre SID pour ne récupérer que les SID qui seront résolus en un compte AD si vous le souhaitez; Pour plus d'informations sur la structure SID, cliquez ici: https://technet.Microsoft.com/en-us/library/cc962011.aspx

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

Dans le HKEY_USERS\oneyouwanttoknow\, vous pouvez regarder \Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders et il révélera leurs chemins de profil. c:\users\whothisis\Desktop, etc.

0
Bobby Kearan

Fait, par un peu de programmation créative, 

  1. Énumérer les clés dans HKEY_USERS pour ces touches numériques amusantes ...

  2. Énumérer les clés dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList \

et vous retrouverez les mêmes nombres .... Maintenant, dans ces clés, examinez la valeur String: ProfileImagePath = "SomeValue" où les valeurs sont:

"% systemroot%\system32\config\systemprofile" ... pas intéressé par celui-ci ... car ce n'est pas un chemin d'accès directory ...

% SystemDrive%\Documents and Settings\LocalService - "Services locaux" % SystemDrive%\Documents and Settings\NetworkService "SERVICE RÉSEAU"

ou 

% SystemDrive%\Documents and Settings\USER_NAME, qui se traduit directement par les valeurs "USERNAME" dans la plupart des systèmes non falsifiés, c'est-à-dire. où l'utilisateur n'a pas changé son nom d'utilisateur après quelques semaines ou modifié explicitement les chemins d'accès ...

0
spadge