如何使用PowerShell以编程方式查找用户HKEY_USERS注册表项?

Eri*_*rik 12 registry powershell windows-7

我想知道如果您知道本地计算机上该用户的登录名,是否有办法在HKEY_USERS中查找本地用户的注册表项.我想以编程方式将内容添加到特定用户的注册表项(例如,自动运行),但我只知道用户名.如何确定HKEY_USERS中哪些神秘用户实际属于特定用户名?

rav*_*nth 18

$User = New-Object System.Security.Principal.NTAccount($env:UserName)
$sid = $User.Translate([System.Security.Principal.SecurityIdentifier]).value
Run Code Online (Sandbox Code Playgroud)

上面的代码段为您提供了登录用户的SID.这个附加到HKEY_USERS后,为您提供该用户名的正确路径.

New-PSDrive HKU Registry HKEY_USERS
Get-Item "HKU:\${sid}"
Run Code Online (Sandbox Code Playgroud)

  • 如果您不想要 `New-PSDrive` (HKU:),看来您可以只使用 `Get-ItemRegistry::HKEY_USERS\${sid}`。 (2认同)

Dav*_*obb 5

这个答案不完整,因为HKEY_USERS并不包含所有用户,仅包含当前处于活动状态的用户。

您需要为要使用的用户加载注册表配置单元

reg load hku\ThatUserName C:\Users\ThatUserName\NTUSER.DAT
Run Code Online (Sandbox Code Playgroud)

请参阅此SO答案,以获取有关如何为所有用户加载注册表配置单元的示例。

然后,您可以使用以下命令访问该用户的注册表

Set-Location HKU:\ThatUserName
Run Code Online (Sandbox Code Playgroud)

或调用New-PSDrive为用户注册表提供它自己的驱动器,如下所示:

New-PSDrive -Name HKThatUser -PSProvider Registry -Root HKU\ThatUserName 
Set-Location HKThatUser:
Run Code Online (Sandbox Code Playgroud)

确保卸载注册表,并进行垃圾回收,以确保完成后释放配置单元:

reg unload hku\ThatUserName
[gc]::collect()
Run Code Online (Sandbox Code Playgroud)

看到这篇文章以获取更多信息