2012-06-06 20 views
10

Me pregunto si hay una forma de encontrar la clave de registro de un usuario local en HKEY_USERS si conoce el nombre de usuario de ese usuario en la máquina local. Quiero agregar cosas programáticamente a las claves de registro de un usuario específico (Autorun por ejemplo), pero solo conozco el nombre de usuario. ¿Cómo puedo determinar cuál de los usuarios crípticos en HKEY_USERS realmente pertenece a un nombre de usuario específico?¿Cómo puedo encontrar programáticamente la clave de registro HKEY_USERS de un usuario usando powershell?

Respuesta

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

El fragmento de arriba le proporciona el SID del usuario que ha iniciado sesión. Esto cuando se agrega a HKEY_USERS le da la ruta correcta para ese nombre de usuario.

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

Ok, ¿sabe cómo programaticaly (PowerShell) cargar una sección de usuario, como se puede hacer con regedit.exe? – JPBlanc

+0

U significa algo similar a la opción de CARGAR reg.exe? – ravikanth

+0

@JPBlanc Parece que no hay soporte en .NET y posteriormente en PowerShell para hacer eso. Tendrás que P/Invocar la API de Windows usando RegLoadKey(). Mira esto - http://www.csharphelp.com/2007/01/registry-ins-and-outs-using-c/ –

4

Esta respuesta no es completa, ya que HKEY_USERS no contiene todos los usuarios, solo aquellos que están actualmente activos.

Tendrá que cargar la sección del Registro para el usuario (s) que desea trabajar con el uso de

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

Ver this SO answer para un ejemplo de cómo cargar la sección del Registro de todo el usuario (s)

entonces usted puede tener acceso al registro de dicho usuario con

Set-Location HKU:\ThatUserName 

O llame Nueva PSDrive para dar el registro del usuario su propio coche, así:

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

Asegúrese de descargar la registro, y recopilación de basura para asegurarse de que la colmena se libera cuando termine:

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

Ver this post for more info

+0

La parte para asegurar que se libera la colmena es importante. Tuve que cambiar el orden a '[gc] :: collect() [GC] :: WaitForPendingFinalizers() reg download hku \ ThatUserName'. De lo contrario, obtendré un error de permiso denegado al descargar. Si no lo descargo, los cambios en el registro no se guardan. – absynce

1

Esto lo hace por mí

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

Example

Cuestiones relacionadas