PowerShell卸载32位和64位Java仅读取64位路径问题求助
问题分析
- 代码存在变量覆盖问题:你先后给
$Uninstall变量赋值两次,第二次使用64位注册表路径查询结果的赋值,直接覆盖了第一次32位路径的查询结果,因此32位Java的卸载信息完全没有被保留,最终仅能处理64位的卸载项。
修正代码
将两次注册表查询的结果合并后再统一筛选即可,修改后的脚本如下:
# 读取32位Java对应的注册表路径 $Source32 = Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* # 读取64位Java对应的注册表路径 $Source64 = Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* # 合并两个路径的查询结果后统一筛选Oracle发布的Java程序 $UninstallEntries = $Source32 + $Source64 | Where-Object {($_.Publisher -like '*Oracle*')-and ($_.DisplayName -like 'Java*')} # 处理卸载字符串,添加静默卸载参数、将安装参数替换为卸载参数 $UninstallStrings = $UninstallEntries.UninstallString -replace "MsiExec.exe ","MsiExec.exe /qn " -replace "/I","/X" # 批量执行卸载 ForEach($UninstallString in $UninstallStrings){ & cmd /c "$UninstallString" }
额外说明
- 修正方案仅调整了结果合并逻辑,未修改你原有筛选、卸载字符串处理、执行卸载的核心逻辑,兼容你原有的需求。
- 变量名做了语义化调整,更便于后续维护排查问题。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

