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

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

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

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

У меня все работает, а на поддержке 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 не будет опубликован. Обязательные поля помечены *