Продолжаем всем миром юзать SCCM 2012.
Обычно установка программ через software distributions эта та часть SCCM которая вызывает меньше всего проблем, другое дело когда необходимо удалить какую-то программу. Иногда это надо сделать против воли самого пользователя.) И поскольку SCCM всего лишь транспорт вашего задания, то системный администратор должен сам написать процедуру удаления софта.
Итак:
1. Самым легким решением является написание скрипта и распространение его на клиентов, на подобии программы установки.
Все вроде бы просто, строку msiexec /x> <Product.msi | Код_продукта>
запихнули в скрипт, и отправили по коллекции.
В пакет пишем так
start /wait MsiExec.exe /x{90510409-6000-11D3-8CFE-0150048383C9} /qn
Вычислить код продукта (GUID), относится только к программам запакованным "MSI Installer". Узнать его можно следующими способами:
- перейти в каталог "%SystemRoot%\Installer" и найти код продукта для удаления, в нашем примере код "Microsoft Office Visio Professional 2003" - {90510409-6000-11D3-8CFE-0150048383C9}.
Примечание: папка "Installer" скрыта, для ее отображения необходимо в свойстве папки снять галку с "Показывать скрытые файлы и папки" и "Скрывать защищенные системные файлы (рекомендуется)".
- открыть системный реестр (regedit.exe), пройти в HKEY_CLASSES_ROOT\Installer\Products и найти код продукта для удаления, в нашем примере код "Microsoft Office Visio Professional 2003" - {90510409-6000-11D3-8CFE-0150048383C9}.
2. Выше-написанное работает когда у нас все установлено штатно. Иногда, мы не знаем код продукта на удаленном хосте, или продукт установлен “криво” и msiexec отказывается с ним работать. Можно пойти по другому пути – удалить через WMI.
Пишем скрипт VBScript (uninstall.vbs):
On Error Resume Next
Set WshShellNet = Wscript.CreateObject("Wscript.Network")
StrComputer = WshShellNet.ComputerName
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product WHERE Name = 'Software Name'")
For Each objSoftware in colSoftware
SoftwareProduct.Uninstall()
Next
В пакет пишем так
cscript.exe //nologo uninstall.vbs
Или вариант в PowerShell (uninstall.ps1):
$app = Get-WmiObject
-Query "SELECT * FROM Win32_Product WHERE Name = 'Software Name'"
или
$app = Get-WmiObject -Class Win32_Product `
-Filter "Name = 'Software Name'"
$app.Uninstall()
В пакет пишем так
powershell -ExecutionPolicy Unrestricted -File %~DP0\uninstall.ps1
Успехов.
For Each objSoftware in colSoftware
ReplyDeleteobjSoftware.Uninstall()
Next