Recursion 注册表-HKEY_用户递归删除密钥(VBS)

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

我想通过用户配置文件/HKEY_用户位置递归删除以下值。这就是我目前得到的。但是,我无法让脚本删除“strKeyPath”变量下的值。我已经删除了我以前所做的,因为这是非常错误的

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中不存在