首页 > 解决方案 > 使用远程注册表服务访问所有用户注册表

问题描述

我目前正在开发一个 PowerShell 工具,该工具通过远程注册表服务从注册表远程读取。当用户登录时,我正在读取的数据位于HKCU\Software\. 显然,当一台计算机有多个用户帐户时,HKCU 并不能准确地反映所有用户。是否有一种动态方式可以让我循环访问计算机上的所有用户并访问他们的注册表?

目前我在 PowerShell 中执行以下操作:

$KeyType = [Microsoft.Win32.RegistryHive]::CurrentUser
$BaseRegKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($KeyType, $RemoteComputer)
$SoftwareKey = $BaseRegKey.OpenSubKey($SoftwarePathEnding)

我如何能够使用类似的代码来遍历所有用户以获取我正在寻找的正确数据?

对不起,如果这没有解释得很好,如果我需要提供一些澄清。

标签: windowspowershellregistryremote-registry

解决方案


HKCU是 的快捷方式HKU\<User-SID>ntuser.dat在登录时从用户的配置文件中加载。要访问每个用户的注册表分支,您需要首先加载每个用户的注册表ntuser.dat,例如通过reg load在远程主机上运行Invoke-Command.

Invoke-Command -Computer 'hostname' -ScriptBlock {
    & reg load 'HKU\someuser' 'C:\Users\someuser\ntuser.dat'
}

完成后不要忘记reg unload文件。


推荐阅读