我在Windows 10和7中安装了一些以(在“卸载程序”中)开头的程序
“ Python info.data-5.332234”“ Python delta.ind-5.332234”“ Python module.data-15.332234“” Python hatch.back-0.332234“
我尝试过使用PowerShell与部分匹配项进行尝试和卸载的各种脚本,但是似乎都没有一个可以卸载程序。
这是我使用的最新脚本,无法正常运行...它会卸载注册表项,但实际上并未从“卸载程序”中删除文件夹或该项
$remove = @('Python info.data', 'Python delta.ind', 'Python module.data', 'Python hatch.back')
foreach ($prog_name in $remove) {
Write "Uninstalling" % $prog_name
$uninstall32 = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" | foreach { gp $_.PSPath } | ? { $_ -match $prog_name } | select UninstallString
if ($uninstall32) {
$uninstall32 = $uninstall32.UninstallString -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
$uninstall32 = $uninstall32.Trim()
Write "Uninstalling..."
Write $uninstall32
start-process "msiexec.exe" -arg "/X $uninstall32 /qn" -Wait}
}
答案 0 :(得分:0)
问题是,变量$uninstall32
可以包含多个条目。
在启动msiexec之前添加$uninstall32.GetType()
,以检查变量是否包含多个字符串。如果是这样,则msiexec将不会运行,因为您一次要传递两个GUID。
使用Win32_Product WMI类获取所需应用程序的GUID。
$remove = @('Python info.data', 'Python delta.ind', 'Python module.data', 'Python hatch.back')
foreach ($prog_name in $remove) {
$uninstall32 = @(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '$prog_name%'")
foreach ($product in $uninstall32) {
Write "Uninstalling...`n$($product.Name)"
$exitCode = (Start-Process "msiexec.exe" -ArgumentList "/X $($product.IdentifyingNumber) /qn" -Wait -PassThru).ExitCode
Write "$($product.Name) return ExitCode: $exitCode"
}
}
另外,在-PassThrue
CMDLet上添加Start-Process
开关,并捕获/输出每个卸载过程的ExitCode。
确保您的Powershell / ISE以提升的特权运行。