Recursion 注册表-HKEY_用户递归删除密钥(VBS)
我想通过用户配置文件/HKEY_用户位置递归删除以下值。这就是我目前得到的。但是,我无法让脚本删除“strKeyPath”变量下的值。我已经删除了我以前所做的,因为这是非常错误的Recursion 注册表-HKEY_用户递归删除密钥(VBS),recursion,vbscript,registry,profile,Recursion,Vbscript,Registry,Profile,我想通过用户配置文件/HKEY_用户位置递归删除以下值。这就是我目前得到的。但是,我无法让脚本删除“strKeyPath”变量下的值。我已经删除了我以前所做的,因为这是非常错误的 Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 'Set the local computer as the targe
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
'Set the local computer as the target
strComputer = "."
'set the objRegistry Object
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
'Enumerate All subkeys in HKEY_USERS
objRegistry.EnumKey HKEY_USERS, "", arrSubkeys
'Define variables
strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\Uninstall\50cc940dd0f54608"
strSID = "S-1-5-21-\d*-\d*-\d*-\d*\\"
您试图实现的并不是真正的“递归”,您只是从许多不同的地方删除一个注册表项。我会这样做:
Option Explicit
Const HKU = &H80000003
Dim wmi, reg
Dim prof, profs
Dim key
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set reg = GetObject("winmgmts:\\.\root\default:StdRegProv")
Set profs = wmi.ExecQuery("Select SID from Win32_UserProfile where SID like 'S-1-5-21%'")
For Each prof In profs
key = prof.SID & "\Software\Microsoft\Windows\CurrentVersion\Uninstall\50cc940dd0f54608"
WScript.Echo key
'Call reg.DeleteKey(HKU, key) 'commented out for safety
Next
WMI查询匹配系统上的所有用户配置文件,与正则表达式相同,其结果用于构建注册表路径
从注册表中删除时请小心是否有帮助?我想我不知道如何将这些信息集成到脚本中。请仔细查看过程
TraverseRegistry
,并尝试了解它的作用。这太棒了,我没有想到在注册表中使用WMI。您知道这在Windows XP上是否有效吗,我在XP上启用了WMI,但也许我需要为XP创建一个WMI?它在Windows 7、8和8.1上运行得非常好,其他阅读本文的人可以看到:Win32_UserProfile类在Windows XP中不存在