这是一个非常简单的脚本,只需卸载一个应用程序。这是我的代码:
$app = Get-WmiObject -Class Win32_Product -Filter "Name = 'Alliance Suite G5'"
Write-Host $app
$app.Uninstall()
我将Write-Host放入其中以确保它正在抓取正确的应用程序。这是我的输出。
\ COMPUTERNAME \根\ CIMV2:Win32_Product.IdentifyingNumber =" {99B66721-7E75-487C-A0C8-A4F8C4325661}",名称="联盟 G5套房",版本=" 2013.2.14226.1"
__ GENUS:2
__ CLASS:__PARAMETERS
__ SUPERCLASS:
__ DYNASTY:__PARAMETERS
__ RELPATH:
__ PROPERTY_COUNT:1
__ DERIVATION:{}
__ SERVER:
__ NAMESPACE:
__ PATH:
ReturnValue:0
PSComputerName:
返回值为0,但它实际上从未卸载应用程序。任何帮助,将不胜感激!我在晚上运行一些自动化测试,其中一个安装应用程序,所以如果我可以制作一个计划的PowerShell脚本来卸载它会很好。
事件查看器(注意:产品是"在第二条消息之前重新配置了几次):
Windows Installer reconfigured the product. Product Name: Microsoft Identity Extensions. Product Version: 2.0.1459.0. Product Language: 1033. Manufacturer: Microsoft Corporation. Reconfiguration success or error status: 0.
Beginning a Windows Installer transaction: {99B66721-7E75-487C-A0C8-A4F8C4325661}. Client Process Id: 8664.
Product: Alliance Suite G5 -- Removal completed successfully.
Windows Installer removed the product. Product Name: Alliance Suite G5. Product Version: 2013.2.14226.1. Product Language: 1033. Manufacturer: United Systems & Software. Removal success or error status: 0.
运行命令时的结果:
C:\Windows\system32>msiexec.exe /X "C:\AllianceInstall\G5\Alliance.G5.exe" /QN /
L*V "C:\msilog.log
===详细日志记录已启动:2014年8月18日9:42:06构建类型:SHIP UNICODE 5.00.9200.00调用进程:C:\ Windows \ system32 \ msiexec.exe === MSI(c)(5C:74)
[09:42:06:039]:重置缓存的策略值MSI(c)(5C:74)
[09:42:06:039]:机器政策价值'调试'是0 MSI (C) (5C:74)[09:42:06:039]: * RunEngine: * 产品:C:\ AllianceInstall \ G5 \ Alliance.G5.exe * 行动: * CommandLine: ****** MSI(c)(5C:74)
[09:42:06:039]:客户端和> UI是无或基本的:运行整个
在服务器上安装。 MSI(c)(5C:74)
[09:42:06:039]:抓取执行互斥锁。 MSI(c)(5C:74)
[09:42:06:061]:启用隐藏真实内容。 MSI(c)(5C:74)
[09:42:06:061]:尝试之前启用所有已禁用的权限 调用在服务器MSI上安装(c)(5C:74)
[09:42:06:064]:递增计数器以禁用关机。计数器
增量后:0 MSI(s)(F8:48)[09:42:06:069]:正在运行 安装在多包事务中 C:\ AllianceInstall \ G5 \ Alliance.G5.exe MSI(s)(F8:48) [09:42:06:069]:抓取执行互斥锁。 MSI(F8:64)
[09:42:06:071]:重置缓存的策略值MSI(s)(F8:64) [09:42:06:071]:机器政策价值'调试'是0 MSI(F8:64) [09:42:06:071]: * RunEngine:
******* Product: C:\AllianceInstall\G5\Alliance.G5.exe ******* Action: ******* CommandLine: ********** MSI (s) (F8:64)
[09:42:06:072]:注意:1:2203 2: C:\ AllianceInstall \ G5 \ Alliance.G5.exe
3:-2147286960 MSI(F8:64)
[09:42:06:073]:MainEngineThread是
返回1620 MSI(F8:48)
[09:42:06:074]:用户政策值
' DISABLEROLLBACK'是0 MSI(F8:48)
[09:42:06:074]:机器政策
值' DisableRollback'是0 MSI(F8:48)
[09:42:06:074]:
递增计数器以禁用关闭。增量后的计数器:0 MSI(F8:48)
[09:42:06:074]:注意:1:1402 2:
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ Installer程序\回滚\脚本 3:2 MSI(F8:48)
[09:42:06:074]:注意:1:1402 2:
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ Installer程序\回滚\脚本 3:2 MSI(F8:48)
[09:42:06:075]:递减计数器以禁用
关机。如果counter> = 0,则拒绝关闭。反击之后 减量:-1 MSI(c)(5C:74)
[09:42:06:076]:减少对抗
禁用关机。如果counter> = 0,则拒绝关闭。计数器 减量后:-1 MSI(c)(5C:74)
[09:42:06:076]:MainEngineThread
返回1620
===详细记录已停止:2014年8月18日9:42:06 ===
答案 0 :(得分:2)
这似乎是一个 Installshield套件项目 - 本质上是通过一些自定义Installshield结构视为单个产品的MSI文件集合。它似乎是 setup.exe类型启动器,也已注册处理 ARP修复/修改。
在聊天中,JLott确认此命令有效:
Alliance.G5.exe /remove /s
JLott使用的完整命令:
C:\Windows\system32>Start C:\AllianceInstall\G5\Alliance.G5.exe /remove /s
除了上述内容之外,您还应该能够通过查找其GUID并通过 msiexec.exe 卸载来卸载每个MSI。
这个简单的 powershell命令将提供已安装产品的列表,其中包含“识别代码”。您可以将此代码传递给Windows安装程序,如下所示:msiexec.exe /x {GUID-HERE}
get-wmiobject -class Win32_Product
或者您可以选择以列表形式:
查看它get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, Version
答案 1 :(得分:1)
您必须首先验证产品是否已正确卸载。请尝试阅读以下文章并以不同方式测试卸载:Uninstalling MSI files
我建议尝试记录整个卸载并查看日志内容:
msiexec.exe /X "C:\Install.msi" /QN /L*V "C:\msilog.log"
或如果您有GUID (请参阅上面的链接文章了解如何找到它):
msiexec.exe /X {YOUR-GUID-HERE} /QN /L*V "C:\msilog.log"
答案 2 :(得分:1)
为什么msiexec命令指向可执行文件?那是不对的。您使用/ X命令传递ProductCode。如果您没有原始MSI文件,则必须使用它。
此vbscript将列出系统上所有已安装的MSI产品,并报告其名称和ProductCodes。使用它来查找ProductCode并在msiexec命令中使用它,如果这是您想要的方向。将其另存为.vbs文件并运行它。
Option Explicit
Public installer, fullmsg, comp, prod, a, fso, pname, ploc, pid, psorce, pcache
Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.CreateTextFile("prods.txt", True)
' Connect to Windows Installer object
Set installer = CreateObject("WindowsInstaller.Installer")
a.writeline ("Products")
on error resume next
For Each prod In installer.products
pid = installer.productinfo (prod, "ProductID")
pname = installer.productinfo (prod, "ProductName")
psorce=installer.productinfo(prod, "InstallSource")
ploc = installer.productinfo (prod, "InstallLocation")
pcache = installer.productinfo(prod, "LocalPackage")
a.writeline (prod & " " & pname & " installed at " & ploc & " from " & psorce & " cached at " & pcache)
Next