【发布时间】:2019-11-06 19:34:12
【问题描述】:
情况总结
我有一些用于 ArcGIS 的第三方扩展软件,我需要能够使用 powershell 脚本将其卸载。我已经使用 AppDeployToolkit for powershell 成功安装和卸载了一套软件,但我一直在尝试卸载这个程序。我可以通过使用“卸载参数”运行 MSI 来卸载所有内容。不幸的是,这个第三方扩展在 msi 中没有卸载/删除选项(当我手动运行它时没有修复、删除或卸载选项)。它只是尝试再次安装。但是,我能够从 Windows 中的“应用程序和功能”程序 GUI 工具中成功卸载。
这是我尝试过的事情:
尝试A:使用 AppDeployToolkit
Execute-MSI -Action "Uninstall" -Path "Path\To\ArcFM.msi"
输出:错误:应用程序已安装
尝试B:使用 WMI 对象
$app = get-wmiobject -class win32_product |where-object {$_.Name -Match "ArcFM Solution Desktop*"}
$app.Uninstall()
输出:1603 错误(这是安装错误的错误代码)
尝试C:使用卸载包
$app = get-package -provider programs -includewindowsinstaller -name "ArcFM*
Uninstall-Package -Name $app
输出:要求我自动安装Microsoft.PackageManagement.NuGetProvider-2.8.5.208.dll。当我输入Y 自动安装时,我得到这个错误......
Uninstall-Package : No package found for 'Microsoft.PackageManagement.Packaging.SoftwareIdentity'.
At line:1 char:1
+ Uninstall-Package -Name $arcfm2
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Package], Exception
+ FullyQualifiedErrorId : NoMatchFound,Microsoft.PowerShell.PackageManagement.Cmdlets.UninstallPackage
我的问题
我的总体问题是“如何从 powershell 卸载此软件?”
但更具体地说....
我可以从“应用程序和功能”中卸载它。因此,当我使用 GUI 执行此操作时,Windows 究竟是如何执行卸载的?它没有使用 MSI,显然也没有使用 wmi-objects。它不能使用 Uninstall-Package,因为它甚至没有安装在机器上。有没有办法让我执行添加/删除程序执行从 powershell 卸载的相同过程?有没有其他方法可以卸载我错过的软件?
【问题讨论】:
-
可能没有静默卸载程序。这说明了什么?
get-package arcfm | % { $_.metadata['uninstallstring'] } -
如果它不是 MSI 包,那么您需要从注册表中获取卸载命令行(即,与
Apps and Features小程序使用的相同)并运行它。 -
我给了我一个索引错误,因为一个空数组......但是如果你想看看我在注册表中是否有一个卸载字符串,我实际上只是在 regedit 中找到的。它是一个以 msiexec.exe 和
/i参数为前缀的长代码字符串。当我将它粘贴到 powershell 时,虽然它给了我 Windows 安装程序帮助窗口,但没有执行任何操作 -
MsiExec.exe /I{7642F00E-69A2-4687-ADBD-4567A05FAF85}
-
那么它确实是一个 Windows 安装程序包。运行
msiexec /x "{guid}" /qb。
标签: windows powershell wmi uninstallation get-wmiobject