2010-05-27 24 views

Respuesta

51

Si nos fijamos en cualquiera de las siguientes teclas:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

Puede encontrar una lista de los SID allí con varios valores, incluidos, en sus "caminos de origen", que incluye sus nombres de usuario.

No estoy seguro de qué tan confiable es esto y no recomendaría jugar con esto a menos que esté realmente seguro de lo que está haciendo.

+0

Exactamente lo que necesitaba. ¡Gracias! – modz0r

+9

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ hivelist parece ser el usuario que ha iniciado sesión en cada sistema (Xp - 7) que he examinado ... Y no consideraría HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \ \ ProfileImagePath una forma confiable de determinar el nombre de usuario (Ver http://support.microsoft.com/kb/2454362). – user66001

20

Es posible consultar esta información en WMI. El siguiente comando generará una tabla con una fila para cada usuario junto con el SID para cada usuario.

wmic useraccount get name,sid 

También puede exportar esta información a CSV:

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

He utilizado este en Vista y 7. Para más información ver WMIC - Take Command-line Control over WMI.

+0

Desafortunadamente, los SID que consigo no coinciden con los valores en HKEY_USERS en Windows 7 x64. –

+0

Es posible que un SID legítimo esté aparentemente ausente porque la colmena de ese usuario en particular no se carga en ese momento.'Runas/profile/user: desireduser somearbitrarycommand' lo cargará. – amonroejj

0

hecho, por un poco de programación creativa,

  1. Enum las Llaves en HKEY_USERS para esas teclas numéricas divertidos ...

  2. Enum las llaves en HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \

y encontrará los mismos números .... Ahora en esas llaves mirar el valor de la secuencia: ProfileImageP ath = "SomeValue" donde los valores son o bien:

"% SystemRoot% \ system32 \ config \ systemprofile" ... no está interesado en este ... ya que no es un camino directorio ...

% SystemDrive% \ Documents and Settings \ LocalService - "Servicios locales" % SystemDrive% \ Documents and Settings \ NetworkService "SERVICIO DE RED"

o

% SystemDrive% \ Documents and Settings \ nombre_usuario, lo que se traduce directamente a los valores de "NOMBRE DE USUARIO" en la mayoría de los sistemas no alterados, es decir. donde el usuario no ha cambiado su nombre de usuario después de unas semanas o ha modificado las rutas de forma explícita ...

+2

""% systemroot% \ system32 \ config \ systemprofile "... ya que no es una ruta de directorio ..." es incorrecto. Pruebe c & p esto en el diálogo de ejecución. – user66001

+0

(confirmado trabajando en WinXP + 7) – user66001

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

  2. hacer un bucle para obtener todas las subclaves

  3. las subclaves está interesado con son los que comenzó con [ S-1-5-21-] que significa usuario (vea el nombre de la clave [ProfileImagePath] siempre se inician con una ruta c: \ Users)

  4. Aquellos que comiencen por [S-1-5-21-12] son todos usuarios locales

  5. Aquellos que comiencen por [S-1-5-21-13] son ​​todos usuarios de la red [si se unieron a la red de dominio] que hayan iniciado sesión previamente en la máquina.

+4

3 contiene un error y no aconseja. [ProfileImagePath] NO TIENE que comenzar con una ruta c: \ Usuarios ... Consulte https://www.google.com/#hl=en&tbo=d&output=search&sclient=psy-ab&q=move+windows+7+ usuario + directorio; Además, como en cualquier otro comentario sobre este hilo, y mencionado por @spade, si el usuario/administrador ha cambiado el nombre de usuario y la creación y el inicio de sesión de la cuenta posterior, el nombre del directorio del perfil ya no coincidirá con el nombre de usuario (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

Es posible que desee utilizar 'etiquetas 'markup" tags "para formatear este ejemplo de código :) – summea

2

Puede utilizar el comando del equipo PSGetSid SysInternals de Microsoft.

Descargar URL: http://technet.microsoft.com/en-gb/sysinternals/bb897417.aspx

Uso:

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. 

Ejemplo:

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

NB:

  • Cuando el usuario es un dominio/AD (LDAP) user , ejecutando esto en cualquier comput er en el dominio debería dar los mismos resultados.
  • Cuando el usuario es local en la máquina, el comando debe ejecutarse en esa máquina, o debe especificar la computadora a través del parámetro opcional.

actualización

Si utiliza PowerShell, lo siguiente puede ser útil para resolver cualquier usuario de AD enumeran:

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

También puede refinar el SID filtrar aún más a solamente retire esos SID que se resolverán en una cuenta AD si lo desea; más en la estructura SID aquí: https://technet.microsoft.com/en-us/library/cc962011.aspx

2

Mediante la búsqueda de mi ID de usuario en el registro, me encontré

HKEY_CURRENT_USER\Volatile Environment\Username 
Cuestiones relacionadas