gifts2017

Удаленное обновление платформы у пользователей через групповые политики.

Опубликовал L M (lm-alex) в раздел Программирование - Инструментарий

Автоматическое обновление платформы на клиентах. Групповые политики.

Выкладываю скрипт.. может кому понадобится.

Описывать не буду, все походу текста закомментировано.. если что задавайте вопросы. обязательно отвечу.

У меня все работает, а на поддержке 8 регионов + Столичный, а это сотни рабочих мест... руками сами понимаете, платформу обновить нереально, у пользователей нет прав на установку ПО, поэтому административная установка не катит, пришлось мудрить через политики.

Примичание:

Главные 3-5 констант, 3 если не требуется удаление старой платформы, 5 если требуется.

SrvName - Имя сервера, от куда ставим.

OldVer, unInstallUID - это данные по версии платформы которую надо удалить, если оно вам надо.

NewVer, InstallUID - это данные по версии которую устанавливаем.

Далее:

THICKCLIENT=1 THINCLIENT=1 WEBSERVEREXT=0 SERVER=0 CONFREPOSSERVER=0 CONVERTER77=0 SERVERCLIENT=0 LANGUAGES=RU" - в коде можно поменять, что ставим на клиента, думаю все понятно.

После старта ситемы просиходит молчиливая установка, тоесть пользователь ничего не видет, программа ставиться в фоне, и уже после пару минут в меню появится новая платформа.

Скрипт:

< --------------------------------------

Option Explicit
Const SrvName = "ServerDistribs"              'Имя сервера

'Значение параметра ProductCode из файла setup.ini ...
'... для удаляемой версии
Const OldVer = "8.2.13.219"             'Текущая версия
Const unInstallUID = "{3A8D1763-00C8-48E1-B8EF-B66B8A908E32}"
'... для устанавливаемой версии
Const NewVer = "8.2.15.301"             'Новая версия
Const InstallUID = "{BC89E40C-CCE7-4B86-9586-8338F5B48EC1}"

Const msiUILevelNoChange = 0        'Не изменять интерфейс пользователя
Const msiUILevelDefault = 1         'Использовать интерфейс пользователя, заданный по умолчанию
Const msiUILevelNone = 2            'Не отображать интерфейс пользователя (молчаливая установка)
Const msiUILevelBasic = 3           'Только индикатор прогресса и отображение ошибок
Const msiUILevelReduced = 4         'Интерфейс пользователя без диалоговых сообщений
Const msiUILevelFull = 5            'Полный интерфейс пользователя
Const msiUILevelHideCancel = 32     'Если используется с msiUILevelBasic, то отображается индикатор прогресса без кнопки Cancel
Const msiUILevelProgressOnly = 64   'Если используется с msiUILevelBasic, то отображается индикатор прогресса без тображения любых диалогов, в т.ч. и ошибок.
Const msiUILevelEndDialog = 128     'Если используется с любым из перечисленных значений, интсталятор выводит сообщение в конце установки о конечном результате.

'Константы для определения действия
Const requiredInstall = 1   ' требуется установка
Const requiredUninstall = 0 ' требуется удаление

'***** Необходимо изменить на реальный каталог установки
Dim DistrFolder
DistrFolder = "\\" & SrvName & "\Distrib\8.2\"

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim shortcutTarget: shortcutTarget = WshShell.ExpandEnvironmentStrings("%ProgramFiles%") & "\1cv82\Common\1cestart.exe"

'Режим установки – logon-скрипт
Dim logonInstall, restartInstall, mstTransfomU, mstTransfomI
'Режим установки – групповая политика

'Режим установки – logon-скрипт
logonInstall = DistrFolder & NewVer & "\adminstallrelogon.mst"
'Режим установки – групповая политика
restartInstall = DistrFolder & NewVer & "\adminstallrestart.mst"

mstTransfomU = DistrFolder & OldVer & "\1049.mst"
mstTransfomI = DistrFolder & NewVer & "\1049.mst"
'Значение параметра ProductCode из файла setup.ini ...

'удалим предыдущую версию
Uninstall unInstallUID, DistrFolder & OldVer & "\1CEnterprise 8.2.msi", mstTransfomU, ""
'установим новую версию
Install InstallUID, DistrFolder & NewVer & "\1CEnterprise 8.2.msi", mstTransfomI, logonInstall

'процедура установки указанной версии продукта
Sub Install(ByVal productCode, ByVal msiPackage, ByVal mstTransform, ByVal mstInstall)
    'productCode - Информация о коде продукта. Находится в файле setup.ini, ключ ProductCode
    'msiPackage - Установочный пакет 1CEnterprise
    'mstTransform - файл языкового преобразования для инсталлятора
    'requiredAction - требуемое действте requiredInstall или requiredUninstall

    'Переменная, для формирования дополнительных параметров инсталлятору
    Dim cmdLine

    On Error Resume Next

    Dim installer, session

    Set installer = Nothing
    Set session = Nothing
    Set installer = WScript.CreateObject("WindowsInstaller.Installer"): processError
    installer.UILevel = msiUILevelHideCancel ' msiUILevelNone 'или укажите другой вариант интерфейса пользователя
    'проверка установки продукта
    Set session = installer.OpenProduct(productCode)

    If session Is Nothing And requiredInstall = 1 Then
        'продукт не установлен и требуется его установка
        cmdLine = "TRANSFORMS=" & mstInstall & ";"
        If Not mstTransform Is Empty Then
            'добавим указание инсталлятору разговаривать на указанном языке
            cmdLine = cmdLine & mstTransform
            'Дополнительно указать, какие компоненты нужно установить
            cmdLine = cmdLine & " THICKCLIENT=1 THINCLIENT=1 WEBSERVEREXT=0 SERVER=0 CONFREPOSSERVER=0 CONVERTER77=0 SERVERCLIENT=0 LANGUAGES=RU"
        End If
        
        'установим платформу
        Set session = installer.InstallProduct(msiPackage, cmdLine)
        
        'создадим ярлык на рабочем столе
        'createShortcut
    End If

    Set session = Nothing
    Set installer = Nothing

End Sub

'процедура удаления указанной версии продукта
Sub Uninstall(ByVal productCode, ByVal msiPackage, ByVal mstTransform, ByVal mstInstall)
    'productCode - Информация о коде продукта. Находится в файле setup.ini, ключ ProductCode
    'msiPackage - Установочный пакет 1CEnterprise
    'mstTransform - файл языкового преобразования для инсталлятора
    'requiredAction - требуемое действте requiredInstall или requiredUninstall

    'Переменная, для формирования дополнительных параметров инсталлятору
    Dim cmdLine

    On Error Resume Next

    Dim installer, session

    Set installer = Nothing
    Set session = Nothing
    Set installer = WScript.CreateObject("WindowsInstaller.Installer"): processError
    installer.UILevel = msiUILevelHideCancel ' msiUILevelNone 'или укажите другой вариант интерфейса пользователя
    'проверка установки продукта
    Set session = installer.OpenProduct(productCode)

    If Not session Is Nothing And requiredUninstall = 1 Then
        'платформа уже установлена и требуется ее удаление
        'обьект session может быть только один!
        Set session = Nothing
        'укажем, что нужно удалить с компьютера пользователя эту версию
        cmdLine = "REMOVE=ALL"
        'удалим
        Set session = installer.InstallProduct(msiPackage, cmdLine)
    End If

    Set session = Nothing
    Set installer = Nothing

End Sub

'обработка ошибок
Sub processError()
    Dim msg
    If Err = 0 Then Exit Sub
    msg = Err.Source & " " & Hex(Err) & ": " & Err.Description
    WScript.Echo msg
    WScript.Quit 2
End Sub

'создание ярлыка
Sub createShortcut()
    Dim WshShell, oShellLink
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Dim strDesktop: strDesktop = WshShell.SpecialFolders("Desktop")
    Set oShellLink = WshShell.createShortcut(strDesktop & "\" & "1CПредприятие.lnk")
    oShellLink.TargetPath = shortcutTarget
    oShellLink.WindowStyle = 1
    oShellLink.Description = shortcutName
    oShellLink.Save
    Set oShellLink = Nothing
    Set WshShell = Nothing
End Sub

------------->

Структуре папок на сервере сами думайте, у меня сделано так..

Шара: \Distrib\8.2\ а уже внутри папки с именами версии платформы 8.2.13.205 8.2.13.219 .... 8.2.15.301 и тд

Советую делать так же, чтоб не переписывать скрипт.. а просто менять пару параметров при следующем обновление, закидывать в политику и вперед.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
inst_1c.vbs
.vbs 6,29Kb
20.04.12
64
.vbs 6,29Kb 64 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий К (SuhoffGV) 25.04.12 14:40
Поясните, откуда запускается скрипт или куда прописать его запуск?

ActiveDirectory нет, пользователи с правами пользователей (без прав на установку ПО)
3. Damon Li (damontut) 06.06.12 02:38
без админских прав не ставиться ...
4. L M (lm-alex) 06.06.12 10:39
Ставится, что то не так настраиваешь в политиках, скрипт должен стартовать от имени системы, пользователь установки вообще не видит, просто после перезагрузки компа, когда политика отработает, появляется новая платформа, а это занимает ну где то минут 5. Пользователи даже начинают звонить, спрашивать: "И где обещанная платформа?".
Я программист, не сисадмин, работаю в команде, обратись к грамотному админу и тебе все расскажут, ну или я попрошу своего сделать описание всех настроек, как поймаю его.
5. Damon Li (damontut) 08.06.12 03:55
(4) lm-alex,
да, ставится через Конфигурация Windows/Сценарии/Автозагрузка
6. Иван Иванов (Famza) 25.07.12 14:57
(Всем) Я не сисадмин, я только учусь.
У меня не получается запустить через групповые политики, может где напутал.
Расклад такой - сам скрипт "inst_1c.vbs" отработан: все удаляет, все устанавливает (аналогичен авторскому).
Есть сервер_1 - на нем домен поднят на Вин2000; в сети и ХР, и Вин7 - расфасованы по подразделениям.
Есть сервер_2 - на нем все что нужно для 1С - в расшаренной папке "1CDistr".
На сервер_1: создаю подразделение "Enterprise" в структуре предприятия - в нем создаю глобальную группу безопасности "Группа_1С"- добавляю комп из домена в участников группы.
Создаю ГП у "Enterprise" - Конфигурация компьютера/Windows/Сценарии/Автозагрузка - батник:
net use s: \\Сервер_2\1CEDistr
call "s:\inst_1c.vbs"
net use s:  /delete

согласно постам 13, 28 из http://diprime.wordpress.com/2010/10/18/%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1­%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-1%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D1%80-3/
На сервер_2: расшаренной папке даю полные права для "Группа_1С". И не работает (((.
7. L M (lm-alex) 26.07.12 15:05
Привет.
Попробуй этот код <--
net use s: \\Сервер_2\1CEDistr
call "s:\inst_1c.vbs"
net use s: /delete -->

полностью заменить на код из файлика inst_1c.vbs, не вызывай его как внешний скрипт, пускай политика его выпоняет.
8. Иван Иванов (Famza) 26.07.12 20:42
(7) lm-alex, спасибо, попробую.
9. Роман (AzzZ) 21.01.13 16:07
Вопрос такой, как сделать чтобы пользователь видел индикатор загрузок, но не видел кнопку отмена:

Что вот здесь нужно написать для этого?

installer.UILevel = msiUILevelHideCancel ' msiUILevelNone 'или укажите другой вариант интерфейса пользователя

я не догоняю фразу:

Const msiUILevelHideCancel = 32 'Если используется с msiUILevelBasic, то отображается индикатор прогресса без кнопки Cancel

как их вместе юзать то?

У меня либо в молчаливовм режиме всё ставится и не видно вообще ничего, либо висит эта гребаная кнопка "отмена". Можно чтобы был индикатор но не было кнопки?
10. L M (lm-alex) 21.01.13 16:18
Приветствую.

Const msiUILevelProgressOnly = 64

installer.UILevel = msiUILevelProgressOnly.

Почему такое название константы? - читаемый код получается. Передавать в UILevel надо значение 0,1,2,3,4,5,32,64,128...
PS:
msiUILevelProgressOnly = 64 (If combined with the msiUILevelBasic value, the installer displays progress dialog boxes but does not display any modal dialog boxes or error dialog boxes.)
Прикрепленные файлы:
11. Kostya Zhurov (It-developer) 29.07.13 16:27
то, о чем писали в умной книжке
12. andrey dyak (dyak84) 15.08.13 17:54
Идея хороша он грамотно реализовать ее ни так то просто есть куча моментов которые автор упустил. Что делать если вындовсы разные 32-64. Но спасибо за труд в любом случае. Так держать бы лаб идея а остальное обкатается!
13. L M (lm-alex) 15.08.13 20:42
Согласен, не просто, я тупой программер, без хорошего системника сложно такие вещи делать.) всем удачи.
14. Migel M. Volos (Cartman) 15.11.13 14:28
Возник вопрос. Как обновлять 2 версии? Т.е. нужно 8.2 и 8.3.
15. L M (lm-alex) 18.11.13 09:52
Двумя заданиями, то есть один скрипт обновление 8.2, другой 8.3
16. Евгений Беспалов (EugeneBespalov) 22.10.14 09:17
Текст в начале и текст выделенный жирным более похоже написан разными людьми. Почему? В первом тексте только несколько запятых да пара дефисов опущено, а вот выделенное жирным просто жуть:
Примичание
молчиливая
не видет
программа ставиться
после пару минут
17. Евгений Беспалов (EugeneBespalov) 22.10.14 09:20
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа