Удалить script не работает правильно

Это действительно простой script, который просто удаляет приложение. Вот мой код:

$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}", Name= "Альянс Suite G5", Version = "2013.2.14226.1"

__ GENUS: 2

__ КЛАСС: __ ПАРАМЕТРЫ

__ SUPERCLASS:

__ DYNASTY: __PARAMETERS

__ RELPATH:

__ PROPERTY_COUNT: 1

__ DERIVATION: {}

__ SERVER:

__ NAMESPACE:

__ PATH:

ReturnValue: 0

PSComputerName:

Возвращаемое значение равно 0, но оно никогда не удаляет приложение. Любая помощь будет оценена! Я запускаю некоторые автоматические тесты в ночное время, и один из них устанавливает приложение, поэтому было бы неплохо, если бы я мог сделать запланированную powershell script, чтобы удалить ее.

Средство просмотра событий (ПРИМЕЧАНИЕ: продукт переконфигурируется несколько раз перед вторым сообщением):

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

=== Началось подробное ведение журнала: 8/18/2014 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 (С) (5C: 74) [09: 42: 06: 039]: * RunEngine:              * Продукт: C:\AllianceInstall\G5\Alliance.G5.exe              * Действие:              * CommandLine: ****** MSI (c) (5C: 74)

[09: 42: 06: 039]: Клиентская сторона и > Пользовательский интерфейс - нет или базовый: Запуск целых

установить на сервер. MSI (c) (5C: 74)

[09: 42: 06: 039]: захватил мьютексы исполнения. MSI (c) (5C: 74)

[09: 42: 06: 061]: Cloaking включен. 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 (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 (s) (F8: 64)

[09: 42: 06: 073]: MainEngineThread

возвращает 1620 MSI (s) (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 (s) (F8: 48)

[09: 42: 06: 074]: Примечание: 1:1402 2:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Откат\Scripts   3: 2 MSI (F8: 48)

[09: 42: 06: 074]: Примечание: 1:1402 2:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Откат\Scripts   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

=== Подробное ведение журнала остановлено: 18.08.2012 9:42:06 ===

Ответ 1

Похоже, что это проект Installshield suite - по существу набор файлов MSI, обработанных как один продукт, через некоторые пользовательские конструкторы Installshield. Он выглядит как setup.exe type launcher, который также зарегистрирован для обработки ARP repair/modify.


В чате JLott подтвердил, что эта команда работала:

Alliance.G5.exe /remove /s

Полная команда, используемая JLott:

C:\Windows\system32>Start C:\AllianceInstall\G5\Alliance.G5.exe /remove /s

В дополнение к вышесказанному вы должны иметь возможность удалить каждый отдельный MSI, найдя его GUID и удалив с помощью msiexec.exe.

Эта простая команда 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

Ответ 2

Вы должны убедиться, что продукт действительно правильно удаляется в первую очередь. Попробуйте прочитать следующую статью и протестировать удаление по-разному: Удаление файлов MSI

Я бы порекомендовал попробовать зарегистрировать всю деинсталляцию и посмотреть, что говорит журнал:

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"

Ответ 3

Почему эта команда 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