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

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

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

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

У меня все работает, а на поддержке 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 & «Distrib8.2»

Dim WshShell
Set WshShell = WScript.CreateObject(«WScript.Shell»)
Dim shortcutTarget: shortcutTarget = WshShell.ExpandEnvironmentStrings(«%ProgramFiles%») & «1cv82Common1cestart.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

————->

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

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

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

16 Comments

  1. SuhoffGV

    Поясните, откуда запускается скрипт или куда прописать его запуск?

    ActiveDirectory нет, пользователи с правами пользователей (без прав на установку ПО)

    Reply
  2. damontut

    без админских прав не ставиться …

    Reply
  3. lm-alex

    Ставится, что то не так настраиваешь в политиках, скрипт должен стартовать от имени системы, пользователь установки вообще не видит, просто после перезагрузки компа, когда политика отработает, появляется новая платформа, а это занимает ну где то минут 5. Пользователи даже начинают звонить, спрашивать: «И где обещанная платформа?».

    Я программист, не сисадмин, работаю в команде, обратись к грамотному админу и тебе все расскажут, ну или я попрошу своего сделать описание всех настроек, как поймаю его.

    Reply
  4. damontut

    (4)

    да, ставится через Конфигурация Windows/Сценарии/Автозагрузка

    Reply
  5. Famza

    (Всем) Я не сисадмин, я только учусь.

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

    Расклад такой — сам скрипт «inst_1c.vbs» отработан: все удаляет, все устанавливает (аналогичен авторскому).

    Есть сервер_1 — на нем домен поднят на Вин2000; в сети и ХР, и Вин7 — расфасованы по подразделениям.

    Есть сервер_2 — на нем все что нужно для 1С — в расшаренной папке «1CDistr».

    На сервер_1: создаю подразделение «Enterprise» в структуре предприятия — в нем создаю глобальную группу безопасности «Группа_1С»- добавляю комп из домена в участников группы.

    Создаю ГП у «Enterprise» — Конфигурация компьютера/Windows/Сценарии/Автозагрузка — батник:

    net use s: \Сервер_21CEDistr
    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С». И не работает (((.

    Reply
  6. lm-alex

    Привет.

    Попробуй этот код <—

    net use s: \Сервер_21CEDistr

    call «s:inst_1c.vbs»

    net use s: /delete —>

    полностью заменить на код из файлика inst_1c.vbs, не вызывай его как внешний скрипт, пускай политика его выпоняет.

    Reply
  7. Famza

    (7) спасибо, попробую.

    Reply
  8. AzzZ

    Вопрос такой, как сделать чтобы пользователь видел индикатор загрузок, но не видел кнопку отмена:

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

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

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

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

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

    У меня либо в молчаливовм режиме всё ставится и не видно вообще ничего, либо висит эта гребаная кнопка «отмена». Можно чтобы был индикатор но не было кнопки?

    Reply
  9. lm-alex

    Приветствую.

    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.)

    Reply
  10. It-developer

    то, о чем писали в умной книжке

    Reply
  11. dyak84

    Идея хороша он грамотно реализовать ее ни так то просто есть куча моментов которые автор упустил. Что делать если вындовсы разные 32-64. Но спасибо за труд в любом случае. Так держать бы лаб идея а остальное обкатается!

    Reply
  12. lm-alex

    Согласен, не просто, я тупой программер, без хорошего системника сложно такие вещи делать.) всем удачи.

    Reply
  13. Cartman

    Возник вопрос. Как обновлять 2 версии? Т.е. нужно 8.2 и 8.3.

    Reply
  14. lm-alex

    Двумя заданиями, то есть один скрипт обновление 8.2, другой 8.3

    Reply
  15. EugeneBespalov

    Текст в начале и текст выделенный жирным более похоже написан разными людьми. Почему? В первом тексте только несколько запятых да пара дефисов опущено, а вот выделенное жирным просто жуть:

    Примичание

    молчиливая

    не видет

    программа ставиться

    после пару минут

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *