18

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

4

3 回答 3

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

上面的代码片段为您提供了登录用户的 SID。当附加到 HKEY_USERS 时,这将为您提供该用户名的正确路径。

New-PSDrive HKU Registry HKEY_USERS
Get-Item "HKU:\${sid}"
于 2012-06-06T06:07:18.117 回答
7

此答案不完整,因为 HKEY_USERS 不包含所有用户,仅包含当前活动的用户。

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

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

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

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

Set-Location HKU:\ThatUserName

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

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

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

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

有关更多信息,请参阅此帖子

于 2013-10-29T23:01:31.820 回答
3

这对我有用

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

例子

于 2014-08-19T12:07:45.787 回答