2009-06-22 13 views
5

Pensé que los nombres clave inmediatamente debajo de HKEY_USERS se suponía que eran los nombres de usuario de quien inició sesión en esta máquina en algún momento. Pero en mi máquina lo que aparece es:¿Cómo se asignan las subclaves HKEY_USERS y los nombres de usuario de Windows?

S-1-5-18 
S-1-5-19 
S-1-5-20 
S-1-5-21-NNNNNNNNN-NNNNNNNNN-NNNNNNNNNN-NNNNN 
S-1-5-21-NNNNNNNNN-NNNNNNNNN-NNNNNNNNNN-NNNNN_Classes 

Me gustaría poder determinar qué subárbol corresponde a qué usuario. ¿Cómo puedo hacer eso?

Edit: lo que necesito es obtener los nombres de usuario de los SID. Quiero inspeccionar las configuraciones de cada usuario que haya iniciado sesión, y necesito saber sus nombres. Por ejemplo, en el registro anterior, debo ser capaz de, en base a la cadena "S-1-5-21-NNNNNNNNN-NNNNNNNNN-NNNNNNNNNN-NNNNN", descubrir que corresponde a DOMAIN \ someone, o LOCALMACHINENAME \ Alguien más.

Respuesta

2

Creo que esos números son la identificación de seguridad (SID) del usuario. Puede utilizar SysInternals para obtener el SID de los usuarios:

http://technet.microsoft.com/en-us/sysinternals/bb897417.aspx

+0

necesito lo contrario - conseguir los nombres de usuario de los SID . Quiero inspeccionar las configuraciones de cada usuario que haya iniciado sesión, y necesito saber sus nombres. – JCCyC

1

HKLM \ System \ CurrentControlSet \ Control \ hivelist le mostrará dónde las colmenas se montan desde. Si bien no es un mapeo directo, generalmente el punto de montaje tiene el nombre de usuario en la ruta.

Estoy seguro de que hay una respuesta mejor que esto, sin embargo ...

+0

Muy útil para sistemas sin dominio. – EFraim

+0

hasta donde veo: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList también funciona en sistemas de dominio – dba

0

Al hacerlo manualmente (sin necesidad de herramientas adicionales), la forma más fácil es abrir los permisos para esa tecla. El único usuario que tiene permisos completos es el propietario de la clave.

Cuando, desde un programa, necesitará una forma de convertir SID a nombres de cuenta. En C# (o PowerShell), eche un vistazo a la clase SecurityIdentifier y NtAccount para eso.

0

en C# Parece que hay una respuesta para traducir el nombre de usuario a SID aquí http://community.bartdesmet.net/blogs/bart/archive/2006/09/08/4394.aspx pero es solo para PC locales.

Para AD I convertidos a:

using System; 
using System.DirectoryServices; 
using System.Security.Principal; 

class Program { 
    static void Main(string[] args) { 
     string path = "LDAP://" + args[0]; 
     DirectoryEntry root = new DirectoryEntry(path, args[1], null, AuthenticationTypes.Secure); 
     string sid = new SecurityIdentifier((byte[])root.Properties["objectSID"][0], 0).Value; 
     Console.WriteLine(sid); 
    } 
} 

El uso es: programname.exe nombre de usuario DOMAIN

por ejemplo nombreprograma.exe somecompany.com preet_sangha

9

Es posible consultar esta información desde 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 (de acuerdo con los comentarios que trabaja en 2008 R2 también). Para obtener más información, consulte WMIC - Take Command-line Control over WMI.

+0

¡Agradable! Solo usé esto en 2008R2 para ahorrarme un pedazo de tiempo. –

2

Para PowerShell esto es rápida:

gwmi win32_userprofile | ft localpath, sid 

Ashley McGlone Microsoft PFE http://aka.ms/GoateePFE

0

Utilice powershell:

$mydocuments = [Environment]::GetFolderPath("mydocuments") 
gwmi win32_userprofile | ft localpath, sid, status -AutoSize | Out-File $mydocuments\userprofiles.txt 
Cuestiones relacionadas