在 MSI 中使用没有删除选项的 powershell 卸载软件 (ArcFM)

Uninstalling software (ArcFM) with powershell with no Remove option in MSI

情况总结

我有一些适用于 ArcGIS 的第三方扩展软件,我需要能够使用 powershell 脚本将其卸载。我已经使用 AppDeployToolkit for powershell 成功安装和卸载了一套软件,但我一直在尝试卸载这个程序。我可以通过 运行 使用 "Uninstall parameter" 连接 MSI 来卸载所有内容。不幸的是,这个第三方扩展在 msi 中没有 uninstall/remove 选项(当我手动 运行 时没有修复、删除或卸载选项)。它只是尝试再次安装。但是,我能够从 windows 中的 'Apps and Features' 程序 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

我的问题

我的总体问题是 "How can I uninstall this software from powershell?"

但更具体地说......

可以从'Apps and Feautures'卸载它。所以当我使用 GUI 执行此操作时,windows 究竟是如何执行卸载的?它没有使用 MSI,显然也没有使用 wmi-objects。它不能使用 Uninstall-Package 因为它甚至没有安装在机器上。有没有办法让我执行 add/remove 程序从 powershell 卸载时执行的相同过程?有没有其他方法可以卸载我错过的软件?

前世,我用过一个叫做PDQ的好玩的产品来管理应用部署。该产品的一项很酷的功能是它为已安装的应用程序提取产品 GUID 并为它们构建卸载程序。这是它是如何做到的:

# GUID is not unique across multiple computers, so pull it from the machine
$gui = Get-WMIObject Win32_Product | Where-Object -Property name -like "ArcFM*" | Select-Object -ExpandProperty IdentifyingNumber
# Use MSIexec.exe /x = uninstall /QN = silent
msiexec /x $guid

希望对您有所帮助!

更新 我正在编辑答案以便我可以接受它。从最终命令中删除 /QN 参数。将它放在 $guid 变量之后也可能有效。