另辟蹊径 使用PowerShell编辑注册表
2022-05-30
1. 查找相关注册表项
Windows 10的所有服务均会在注册表的[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet001\Ser vices]下保存,由于是随机生成的数字服务名称,注册表编辑器无法进行搜索。借助PowerShell则可以使用通配符的方式快速地进行搜索。
以管理员身份启动PowerShell,接着在其中输入并执行命令“Get-ChildItem-Path hklm:\system\ControlSet001\services-Include*[0-9]*-Recurse-ErrorAction SilentlyContinue|Select-Object-Property*Path*|Out-GridView”,可以找到所有包含数字名称的服务(图2)
小知识:注册表的结构及PowerShell对它的基本操作
Windows的注册表是由[HKEY_CLASSES_ROOT]、[HKEY_CURRENT_USER]、[HKEY_LOCAL _MACHINE]、[HKEY_USERS]和[HKEY_CURRENT_CONFIG]这五大主键组成的一个数据库文件,每个主键下又包含多个子键(图1)。当我们使用PowerShell命令行对其进行操作时,PowerShell实际上是将这五大主键作为五个文件夹看待(其下子键则看作子文件夹),这样我们可以使用CD命令定位键值,使用DIR命令查看键值结构,操作起来不仅方便,而且效率也更高。
比如笔者的电脑某次中了一种病毒,虽然杀毒软件已经将病毒清除,但是根据杀毒软件的说明还需要手动将病毒注册的多个随机数字服务删除,有些服务使用SYS驱动加载,通过“服务”组件无法找到这类服务。下面笔者介绍如何用PowerShell来查找和删除这些服务的键值。
通过PowerShell,我们不仅可以使用通配符(如上例中的“[0-9]”,表示包含0-9的数字)搜索,而且可以限定搜索范围(如上述指定的路径“hklm:\system\ControlSet001\services”),这样搜索效率更高(而注册表编辑器只能在所有项中搜索)。同时在搜索结果中还可以使用筛选器进行再次筛选,比如输入“3”,可以找到所有包含数字“3”的服务(图3)。
2. 查看键值结构
通过上述的方法我们找到了所有纯数字名称的服务(如“28823462”和“39923462”),那么这些是不是正常的系统服务?我们还可以在PowerShell中继续输入并执行命令“CDhklm:\system\ControlSet001\services\28823462”(定位到“28823462”服务项),再执行“dir”命令,这样可以看到“28823462”服务项的结构,其下还有一个子项“Parameters”。
如果需要查看服务实际加载的进程,可以通过“Parameters”项右侧窗格中“ImagePath”的值来获取。同上,再输入并执行命令“Get-ItemPropertyValue-Path"."-Name"Image Path"”(表示查看“ImagePath”的值),在窗口中可以看到其执行的是“\SystemRoot\System32\drivers\28823462.sys”文件,而这个正是杀毒软件已经删除的病毒文件(图4)。
3.备份/恢复键值
由于对注册表的操作较为危险,所以在对指定键值进行操作时我们要先进行备份。同上在PowerShell窗口中输入并执行命令“regexporthklm\system\ControlSet001\services\28823462d:\28823462.reg”,将服务键值导出为“d:\28823462.reg”备份。如果后续需要进行恢复,同上再输入并执行命令“regimportd:\28823462.reg”即可(圖5)。
4.修改/删除键值
完成了指定项的备份后,我们可以对这些数字名称的服务进行编辑。比如在系统服务中,右侧窗格中的“Start”(DWORD)值若是“4”表示服务状态是“已禁用”,为了避免直接删除服务带来问题,我们可以先将需要编辑的服务设置为“禁用”,重启并确认没有问题后再删除。
同上,在PowerShell窗口中输入并执行命令“Set-Item Property-Pathhklm:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\28823462\Parameters-name"start"4”。如果需要直接删除该服务的键值,则输入并执行命令“Remove-Item-Pathhklm:\system\ControlSet001\services\28823462-Recurse”(图6)。其他服务键值的处理类似。
借助PowerShell,我们不但可以搜索、查看和更改注册表键值,而且即使注册表编辑器被禁用也可以完成上述的操作。大家以后需要编辑注册表时不妨使用上述的方法。