卸载脚本无法正常执行

时间:2014-08-18 13:15:15

标签: powershell windows-installer wmi uninstall msiexec

这是一个非常简单的脚本,只需卸载一个应用程序。这是我的代码:

$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 ===

  

3 个答案:

答案 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 

enter image description here

或者您可以选择以列表形式

查看它
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, Version

enter image description here

答案 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