在MSI中

情况摘要

我拥有一些用于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卸载此软件?”

但更具体地说。...

CAN 从“应用和功能”中将其卸载。因此,当我使用GUI来执行此操作时,Windows如何执行卸载?它不使用MSI,显然也不使用wmi对象。它不能使用Uninstall-Package,因为它甚至没有安装在计算机上。我有办法执行添加/删除程序以从Powershell卸载执行的相同过程吗?是否有其他方法可以卸载我错过的软件?

chen_004488 回答:在MSI中

前世,我使用了一个有趣的产品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变量之后也可以工作。

本文链接:https://www.f2er.com/3149401.html

大家都在问