2012-06-06 9 views
10

Mi chiedo se esiste un modo per trovare la chiave del Registro di sistema di un utente locale in HKEY_USERS se si conosce il nome di accesso dell'utente sul computer locale. Voglio aggiungere programmaticamente cose a chiavi di registro di un utente specifico (ad esempio Autorun), ma conosco solo il nome utente. Come posso determinare quale degli utenti criptici in HKEY_USERS appartiene effettivamente a un nome utente specifico?Come posso trovare una chiave di registro HKEY_USERS utente utilizzando powershell?

risposta

16
$User = New-Object System.Security.Principal.NTAccount($env:UserName) 
$sid = $User.Translate([System.Security.Principal.SecurityIdentifier]).value 

Il snippet sopra riportato fornisce il SID dell'utente connesso. Questo quando aggiunto a HKEY_USERS ti dà il percorso giusto per quel nome utente.

New-PSDrive HKU Registry HKEY_USERS 
Get-Item "HKU:\${sid}" 
+0

Ok, sai come programaticaly (PowerShell) caricare un hive utente, come si può fare con regedit.exe? – JPBlanc

+0

U significava qualcosa di simile all'opzione LOAD reg.exe? – ravikanth

+0

@JPBlanc Sembra che non ci sia supporto in .NET e successivamente in PowerShell per farlo. Dovrai P/Richiamare l'API di Windows utilizzando RegLoadKey(). Controlla questo - http://www.csharphelp.com/2007/01/registry-ins-and-outs-using-c/ –

4

Questa risposta non è completa, come HKEY_USERS non contiene tutti gli utenti, solo quelli che sono attualmente attivi.

Avrai bisogno di caricare l'hive di registro per l'utente (s) che si desidera lavorare con l'utilizzo di

reg load hku\ThatUserName C:\Users\ThatUserName\NTUSER.DAT 

Vedere this SO answer per un esempio di come caricare l'hive del Registro per tutto l'utente (S).

È quindi possibile accedere al Registro di sistema per quell'utente con

Set-Location HKU:\ThatUserName 

Oppure chiamare il New-PSDrive per dare Registro di sistema dell'utente è proprio disco, in questo modo:

New-PSDrive -Name HKThatUser -PSProvider Registry -Root HKU\ThatUserName 
Set-Location HKThatUser: 

Assicurarsi di scaricare il Registro di sistema e fare garbage collection per garantire che l'hive venga rilasciato una volta terminato:

reg unload hku\ThatUserName 
[gc]::collect() 

Vedere this post for more info

+0

La parte per garantire che l'hive venga rilasciato è importante. Ho dovuto passare l'ordine a '[gc] :: collect() [GC] :: WaitForPendingFinalizers() reg scaricare hku \ ThatUserName'. In caso contrario, ottengo un errore di autorizzazione negato durante lo scaricamento. Se non lo scarico, le modifiche al registro non vengono salvate. – absynce

1

Questo non fa per me

ls 'hklm:software/microsoft/windows nt/currentversion/profilelist' | ? { 
    $_.getvalue('profileimagepath') -match 'Steven' 
} | % pschildname 

Example

Problemi correlati