PowerShell 技能连载 - 使用注册表用户配置单元

读写注册表的 HKEY_LOCAL_USER 十分容易,因为这个配置单元对于所有用户都一致。那么如何读写其他用户的 HKEY_CURRENT_USER 配置单元?

假设您是管理员并且希望为其他用户的 HKEY_CURRENT_USER 配置单元添加注册表值。

首先您需要挂载该用户的用户配置单元。该配置单元位于该用户的用户配置文件下的 NTUSER.DAT 文件中。作为一个管理员,您需要先运行以下 PowerShell 代码来挂载 UserTobias 用户的用户配置文件:

1
PS C:\> REG LOAD HKEY_Users\UserTobias "C:\Users\Tobias\NTUSER.DAT"

该用户配置单元将挂载在 HKEY_USERS 下名为 UserTobias 的注册表键中,而且 PowerShell 可以类似这样存取该路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PS C:\> Get-ChildItem -Path Registry::HKEY_USERS\UserTobias


Hive: HKEY_USERS\UserTobias


Name Property
---- --------
AppEvents
Console ColorTable00 : 789516
ColorTable01 : 14300928
ColorTable02 : 958739
ColorTable03 : 14521914
ColorTable04 : 2035653
ColorTable05 : 9967496
ColorTable06 : 40129

现在要读取甚至写入该指定用户的配置单元十分容易。以下代码将创建一个新的注册表键:

1
PS C:\> $null = New-Item -Path Registry::HKEY_USERS\UserTobias\Software\Microsoft\Windows\CurrentVersion\Test

以下是如何读取/写入一个值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PS C:\> Get-ItemProperty -Path Registry::HKEY_USERS\UserTobias\Software\Microsoft\OneDrive


EnableDownlevelInstallOnBluePlus : 0
EnableTHDFFeatures : 1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_USERS\UserTobias\Software\Microsoft\OneDrive
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_USERS\UserTobias\Software\Microsoft
PSChildName : OneDrive
PSProvider : Microsoft.PowerShell.Core\Registry




PS C:\> Set-ItemProperty -Path Registry::HKEY_USERS\UserTobias\Software\Microsoft\OneDrive -Name EnableDownlevelInstallOnBluePlus -Value 1 -Type DWord

PS C:\> Get-ItemProperty -Path Registry::HKEY_USERS\UserTobias\Software\Microsoft\OneDrive


EnableDownlevelInstallOnBluePlus : 1
EnableTHDFFeatures : 1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_USERS\UserTobias\Software\Microsoft\OneDrive
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_USERS\UserTobias\Software\Microsoft
PSChildName : OneDrive
PSProvider : Microsoft.PowerShell.Core\Registry

当您操作完 HKEY_USERS 注册表配置单元之后,别忘了卸载它:

1
PS C:\> $null = REG UNLOAD HKEY_Users\UserTobias

请注意这条命令将会抛出一个 “Access Denied” 错误,如果您没有管理员特权,或者该注册表配置单元正在被其他人使用。例如,如果您启动了 regedit.exe,当该用户配置单元加载以后,regedit.exe 可以显示加载的用户配置单元,而当 regedit 处于打开状态时,该配置单元被锁定并且无法关闭。

PowerShell 技能连载 - 使用注册表用户配置单元

http://blog.vichamp.com/2018/08/16/manipulating-registry-user-hive/

作者

吴波

发布于

2018-08-16

更新于

2022-07-06

许可协议

评论