А АFriday, 24 April 2015

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

.com/img/a/
Всем привет.

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

1


Примечание: папка "Installer" скрыта, для ее отображения необходимо в свойстве папки снять галку с "Показывать скрытые файлы и папки" и "Скрывать защищенные системные файлы (рекомендуется)".


- открыть системный реестр (regedit.exe), пройти в HKEY_CLASSES_ROOT\Installer\Products и найти код продукта для удаления, в нашем примере код "Microsoft Office Visio Professional 2003" - {90510409-6000-11D3-8CFE-0150048383C9}.

2


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:

blank
Anonymous said...

For Each objSoftware in colSoftware
objSoftware.Uninstall()
Next

Post a Comment

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

Версия на печать

Популярное