Home Menu Search

Saqwel

IT and other things blog

Удаление Adobe CS3 посредством SCCM Package

Share

В этой статье хотел бы задокументировать то, что выяснил при организации автоматизации удаления пакета Adobe CS3 с компьютеров под управлением Windows. Автоматизация была организована посредством создания package в System Center Configuration Manager 2012 R2. В ходе выполнения, казалось бы, простой задачи я столкнулся с большим количеством препятствий, о которых и поведаю ниже.

Adobe CS3, в теории, устанавливался на компьютеры организации посредством того же SCCM, однако, во время анализа путей откуда был установлен пакет на различных компьютерах, выяснилось, что установка производилась и вручную, и автоматически и установлены были различные вариации продуктов Adobe CS3. Этот факт никак не облегчал достижения цели. Во время создания программы установки Adobe CS3, конечно, была предусмотрена необходимость автоматического удаления этого продукта – в свойствах программы установки в SCCM присутствовала команда и для удаления Creative Suite 3, но попытки использования этой команды не привели к удалению программы со всех компьютеров, хотя на некоторых компьютерах программа и была удалена, на большинстве ничего не изменилось.

Я начал поиск путей ручного удаления продуктов Adobe CS3, чтобы просто написать скрипт и запускать его на компьютерах, где надо удалить программу. Оказалось, что Adobe создала пару программ для удаления своих продуктов в случае каких-то неполадок, точнее это чистильщики и этот вариант показался мне приемлемым, чем пытаться удалять каждую программу из пакета Adobe Creative Suite 3 по отдельности, лучше запустить программу, которая сама сделает всё что нужно.

Итак, теперь я обладал двумя программами командной строки, которые могли очистить компьютер от ненужного мне хлама. Первая программа – cs3clean.exe. Само название говорит, что она мне подходит, у нее был один недостаток – после запуска, чтобы перейти к процессу удаления, необходимо ответить на несколько вопросов путем выбора вариантов и ввода этих вариантов в окно командной строки. Эту проблему я решил посредством powershell. Оказывается, powershell способен печатать символы, причем сначала я попытался использовать AutoIt, но AutiIt не смог вводить текст в окно программы cs3clean.exe. Всё было успешно протестировано вручную, но когда начался этап тестирования запуска этой программы клиентом SCCM на подопытных виртуалках, выяснилось, что так как cs3clean написан на Python, то при запуске программы из-под незалогиненной в данный момент учётки программа не может найти переменную HOMEDIR. Запускать cs3clean.exe я мог только от имени SYSTEM, от имени бесправного пользователя, заолгиненного на компьютере запускать скрипт удаления программы бессмысленно.

Я решил попробовать повторить сделать то, что делает cs3clean.exe посредством powershell. Программа cs3clean.exe использовала MsiZap.exe для очистки базы инсталлера Windows от следов своих программ, удаляла несколько веток реестра и папок. В общем, ничего сверхъестественного. Скрипт написал, затестил, но оказалось, что после такой зачистки на Windows 7 x64 установить обратно Adobe CS3 уже невозможно.

Где-то на этой стадии, во время тестирования запуска скрипта powershell из package sccm, я обнаружил некоторые особенности запуска программ. Для начала объясню какая там была схема.

1.    В свойствах программы пакета sccm в качестве команды для запуска был файл .bat, он запускался с параметрами.
2.    Эти параметры передавались внутри батника скрипту powershell. При этом я нашел, что для передачи параметров надо использовать такую конструкцию:

1
powershell.exe -command "&{ .\clean.ps1 param1 param2 param3}"

Всё бы ничего, но при запуске любой программы в Windows 7 x64 клиент SCCM использует 32bitLauncher.exe, и в этом случае запускается 32-битный powershell, а скрипт при использовании параметра -command вообще не стартует. Здесь я нашёл, что для запуска родного для системы poweshell.exe можно использовать путь %winDir%\Sysnative\WindowsPowerShell\v1.0\powershell.exe. Естественно, физически этот путь не существует в файловой системе, походу, его знает только клиент SCCM. Таким образом, для запуска скрипта powershell с параметрами я использовал код:

1
2
3
4
5
6
7
8
@echoon
powershell.exe set-executionpolicyBypass
if exist %winDir%\Sysnative\WindowsPowerShell\v1.0\powershell.exe (
    %winDir%\Sysnative\WindowsPowerShell\v1.0\powershell.exe -command"&{ .\clean.ps1 param01 param02}"-executionpolicybypass
) else (
    powershell.exe -command"&{ .\clean.ps1 param01 param02}"-executionpolicybypass
)
powershell.exe set-executionpolicyRestricted

На 64-битной Windows вновь ничего не работало, так как оказалось, что

1
powershell.exe set-executionpolicy Bypass

дает разрешение на выполнение скриптов только для 32-битного powershell, для 64-битного своя отдельная ветка в реестре и соответственно надо давать свои разрешения. В итоге я получил следующее:

1
2
3
4
5
6
7
8
9
10
@echo on
if exist %winDir%\Sysnative\WindowsPowerShell\v1.0\powershell.exe (
%winDir%\Sysnative\WindowsPowerShell\v1.0\powershell.exe set-executionpolicy Bypass
    %winDir%\Sysnative\WindowsPowerShell\v1.0\powershell.exe -command "&{ .\clean.ps1 param01 param02}" -executionpolicy bypass
%winDir%\Sysnative\WindowsPowerShell\v1.0\powershell.exe set-executionpolicy Restricted
) else (  
powershell.exe set-executionpolicy Bypass
    powershell.exe -command "&{ .\clean.ps1 param01 param02}" -executionpolicy bypass
    powershell.exe set-executionpolicy Restricted
)

После всех этих ухищрений всё же можно было обойтись просто powershell.exe -file clean.ps1, но эти изыскания помогли многое понять.

Но это отступление про powershell увело немного в сторону от основной проблемы. Так как использование cs3clean.exe и её пародии не принесли желаеммого результат, пришла пора попробовать использовать вторую программу, которая называется AdobeCreativeCloudCleanerTool.exe. Она уже посерьезнее и позволяет очистить компьютер от большого количества программ и версий этих программ производства Adobe. И даже есть возможность запуска с параметром – именем файла, в котором будет указано, какие продукты надо удалять, однако, этот функционал оказался не слишком полезным, так как я не мог предсказать, какие программы из пакета Adobe CS3 могут быть установлены на компьютерах. Пришлось опять автоматизировать ответы на вопросы в командной строке, благо тут я смог заставить воспринимать эту программу ответы из текстового файла вот таким образом:

1
AdobeCreativeCloudCleanerTool.exe < answers.txt

Причем, в ходе тестирования этот вариант работал только при выполнении команды из командной строки с повышенными привилегиями, а под Windows XP не работал вообще. Пришлось распаковать AdobeCreativeCloudCleanerTool.exe посредством 7z и запускать ACToolMain.exe.

Таким образом, клиент SCCM запускал батник, который запускал скрипт powershell, который запускал ACToolMain.exe < answers.txt, а также вычищал директории и реестр, так как ACToolMain.exe этого не делал.

Leave a Reply