2009-06-22 13 views
5

Ho pensato che i nomi dei tasti immediatamente inferiori a HKEY_USERS dovevano essere i nomi utente di chiunque abbia effettuato l'accesso a questa macchina in un dato momento. Ma nella mia macchina ciò che appare è:Come mappare le sottochiavi HKEY_USERS e i nomi utente di 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 

Mi piacerebbe essere in grado di determinare quale sotto-albero corrisponde a quale utente. Come lo posso fare?

Modifica: WHat I need è ottenere i nomi utente dai SID. Voglio ispezionare le configurazioni di ogni utente che abbia mai effettuato l'accesso e ho bisogno di conoscere i loro nomi. Ad esempio, nel registro di cui sopra, devo essere in grado di, in base alla stringa "S-1-5-21-NNNNNNNNN-NNNNNNNNN-NNNNNNNNNNN-NNNNNN", scoprire che corrisponde a DOMAIN \ qualcuno o LOCALMACHINENAME \ qualcun altro.

risposta

2

Credo che quei numeri siano l'ID di sicurezza dell'utente (SID). È possibile utilizzare SysInternals per ottenere i SID degli utenti:

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

+0

Ho bisogno il contrario - ottenere i nomi utente dai SID . Voglio ispezionare le configurazioni di ogni utente che abbia mai effettuato l'accesso e ho bisogno di conoscere i loro nomi. – JCCyC

1

HKLM \ System \ CurrentControlSet Control \ Hivelist \ vi mostrerà dove gli alveari sono montate da. Sebbene non sia una mappatura diretta, in genere il punto di montaggio ha il nome utente nel percorso.

Sono sicuro che ci sia una risposta migliore di questo, però ...

+0

Molto utile per i sistemi non di dominio. – EFraim

+0

fino a che vedo: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList funziona anche su sistemi di dominio – dba

0

Quando farlo manualmente (senza strumenti aggiuntivi), il modo più semplice è quello di aprire le autorizzazioni per quella chiave. L'unico utente che dispone di autorizzazioni complete è il proprietario della chiave.

Quando da un programma, è necessario un modo per convertire i SID in nomi di account. In C# (o PowerShell), dai un'occhiata al SecurityIdentifier e alla classe NtAccount per quello.

0

in C# sembra essere una risposta alla traduzione di nome utente per SID qui http://community.bartdesmet.net/blogs/bart/archive/2006/09/08/4394.aspx ma è solo per PC locali.

Per dC I convertiti 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); 
    } 
} 

L'utilizzo è: programname.exe nome utente DOMAIN

esempio nomeprogramma.exe somecompany.com preet_sangha

9

È possibile interrogare queste informazioni da WMI. Il seguente comando genererà una tabella con una riga per ogni utente insieme al SID per ogni utente.

wmic useraccount get name,sid 

È inoltre possibile esportare queste informazioni in formato CSV:

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

Ho usato questo su Vista e 7 (in base ai commenti funziona su 2008 R2 pure). Per ulteriori informazioni, vedere WMIC - Take Command-line Control over WMI.

+0

Nice! L'ho usato solo su 2008R2 per risparmiarmi un po 'di tempo. –

2

Per PowerShell questo è semplice:

gwmi win32_userprofile | ft localpath, sid 

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

0

Utilizzare powershell:

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