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
$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}"
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
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
Questo non fa per me
ls 'hklm:software/microsoft/windows nt/currentversion/profilelist' | ? {
$_.getvalue('profileimagepath') -match 'Steven'
} | % pschildname
Ok, sai come programaticaly (PowerShell) caricare un hive utente, come si può fare con regedit.exe? – JPBlanc
U significava qualcosa di simile all'opzione LOAD reg.exe? – ravikanth
@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/ –