Главная

Friday, 24 April 2015

Варианты удаления программ в SCCM 2012.

Всем привет.

Продолжаем всем миром юзать 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

Успехов.

1 comment:

  1. For Each objSoftware in colSoftware
    objSoftware.Uninstall()
    Next

    ReplyDelete

А что вы думаете по этому поводу?