删除批处理文件中的注册表项(错误:访问被拒绝)

时间:2018-07-20 04:46:05

标签: powershell batch-file cmd scripting

我正在尝试删除批处理文件中的注册表项,这就是我正在做的事情。

reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM" /f

我收到以下错误:

ERROR: Access is denied.

但是,我只需要打开regedit.exe并右键单击并删除注册表项就可以了!显而易见,我以管理员身份提升了批处理文件实例,以管理员身份登录,并尝试同时以管理员身份从cmd和powershell实例运行该批处理。管理员帐户具有注册表项的全部权限,这就是为什么我能够仅通过regedit GUI删除它们的原因。这是大型批处理文件脚本的一部分,关键是我希望整个过程都自动化。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

许多公司将GPO设置称为“防止对注册表编辑工具的访问”设置为“是”。 也许这是罪魁祸首。当您自己运行regedit时,计算机可能会首先向您显示UAC消息,然后单击“确定”?

如果尝试使用其他脚本语言(例如VBScript)删除密钥,则可能会得到有用的错误消息:

Const HKEY_LOCAL_MACHINE = &H80000002
Dim objReg, strKeyPath, strComputer

strComputer = "."

Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
                       strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft\CCM"
objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath
Set objReg = Nothing

或使用PowerShell:

Remove-Item -Path 'HKLM:\SOFTWARE\Microsoft\CCM' -Recurse

答案 1 :(得分:0)

更多有关@Theo响应的跟进操作,似乎该命令使应该工作,从而阻止了您的访问。我建议尝试一下他的想法,如果它不起作用,尝试这个。

由于您具有管理员访问权限,因此您可以尝试为密钥提供Everyone权限,因为您要做的就是将其删除。 REGINI命令可以执行此操作,但是会增加一些脚本内容。

::Grant perms to REG key
echo \Registry\machine\SOFTWARE\Microsoft\NEW [7] >> "%~dp0KeyPermx.txt"
REGINI %~dp0KeyPermx.txt
del %~dp0KeyPermx.txt

::Remove the key
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NEW" /f