PowerShell查询注册表无法找到McAfee Drive Encryption项值
问题描述
设备已安装McAfee Drive Encryption,手动打开注册表编辑器定位到HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\路径时,可以看到该软件对应的卸载条目,但执行如下PowerShell命令无法检索到对应条目:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -match "McAfee Drive" } | select DisplayName, DisplayVersion
后续执行不带过滤条件的基础查询命令:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
可以列出路径下其他所有应用的注册表条目,唯独缺失McAfee Drive Encryption的对应值。相同命令在其他账号、其他设备上测试可正常返回该软件条目。
排查与解决方法
按优先级从高到低逐一验证即可:
- 检查PowerShell进程架构匹配问题
32位PowerShell进程访问64位系统的HKLM下Software路径时,会被系统自动重定向到Wow6432Node对应的32位软件注册表路径,如果你手动打开的是64位注册表编辑器(系统默认从System32目录启动的regedit)看到的条目,而当前运行的是32位PowerShell,就会出现手动可见、命令查询不到的问题。
先在当前PowerShell窗口执行[Environment]::Is64BitProcess,如果返回$false,直接去C:\Windows\System32\WindowsPowerShell\v1.0\路径下启动64位powershell.exe,重新执行查询命令即可。 - 检查注册表项读取权限
McAfee作为安全类软件,会对自身的注册表项设置严格权限限制,且Get-ItemProperty遍历注册表路径时,遇到当前账号无读取权限的项会直接静默跳过,不会抛出显性报错,很容易让人误以为条目不存在。
首先右键点击PowerShell图标选择「以管理员身份运行」,重新执行查询命令;如果还是查不到,手动在注册表编辑器中找到McAfee Drive Encryption对应的卸载项,右键打开「权限」面板,确认当前使用的账号拥有该项的读取权限。 - 检查McAfee自我保护拦截
McAfee Drive Encryption是磁盘加密类安全产品,默认开启自我保护机制,会拦截非授信进程对自身配置、注册表项的读取/修改操作,防止恶意软件破坏加密逻辑。如果是个人设备,可以临时在McAfee设置中关闭「产品自我保护」选项后重试查询,查询完成后记得重新开启该功能;如果是企业域管设备,不要私自修改安全策略,联系IT管理员确认权限即可。 - 兼容全路径查询写法
如果需要同时覆盖64位、32位软件的注册表卸载路径,避免架构重定向导致的查询遗漏,可以直接使用以下命令查询:
$uninstallPaths = @( 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' ) Get-ItemProperty $uninstallPaths | Where-Object { $_.DisplayName -match "McAfee Drive Encryption" } | Select-Object DisplayName, DisplayVersion
内容的提问来源于stack exchange,提问作者majdinuk
相关产品推荐
相关产品推荐

