Удаление программного обеспечения (ArcFM) с PowerShell без опции «Удалить» в MSI - PullRequest
0 голосов
/ 06 ноября 2019

Краткое описание ситуации

У меня есть стороннее программное обеспечение расширения для ArcGIS, которое мне нужно удалить с помощью сценария powershell. Я успешно установил и удалил пакет программного обеспечения, используя AppDeployToolkit для powershell, но я застрял, пытаясь удалить эту программу. Я могу удалить все, запустив MSI с «параметром удаления». К сожалению, это стороннее расширение не имеет опции удаления / удаления в MSI (нет вариантов восстановления, удаления или удаления, когда я запускаю его вручную). Он просто пытается установить снова. Тем не менее, я могу успешно удалить инструмент графического интерфейса программы «Приложения и компоненты» в Windows.

Вот что я пробовал:

попытка 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 : использование пакета Uninstall

$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?»

Но более конкретно ....

I CAN удалить его из «Приложения и функции». Итак, когда я использую графический интерфейс для этого, как именно Windows выполняет удаление? Он не использует MSI и, очевидно, также не использует wmi-объекты. Он не может использовать Uninstall-Package, потому что он даже не установлен на машине. Есть ли способ для меня выполнить тот же процесс, который выполняет добавление / удаление программ для удаления из powershell? Есть ли другой способ удалить программное обеспечение, которое я пропустил?

1 Ответ

1 голос
/ 06 ноября 2019

В прошлой жизни я использовал забавный продукт под названием 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

Надеюсь, это поможет!

ОБНОВЛЕНИЕ Я редактирую ответ, чтобы принять его. Удаление параметра e / QN из последней команды. Размещение его после переменной $ guid также может сработать.

...