Установка продукта через AD с логированием в сетевую папку

15 0

Как известно, при установке через AD пакетов Windows Installer’а (MSI) нельзя задать параметр, куда писать лог-файл.

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

Настройка начинается как стандартная установка MSI-пакета, через «Управление групповой политикой»:


С помощью пункта контекстного меню Изменить (или через верхнее меню Действие) открыть «Редактор управления групповыми политиками»:

Выбрать Конфигурация компьютера --> Политики --> Конфигурация Windows --> Сценарии (запуск/завершение), а справа – элемент «Автозагрузка». Нажать на ссылку «свойства» или дважды кликнуть по элементу.

Откроется окно свойств:

Нажать на кнопку Добавить.

Откроется окно добавления сценария:

Нажать на кнопку Обзор.

Откроется диалог выбора файла сценария:

Предлагаемый путь по умолчанию «…\Policies\{…}\Machine\Scripts\Startup». Нужно положить скрипт в эту папку (можно перетащить прямо в диалог или скопировать стандартными Копировать и Вставить).

Нажать кнопку Открыть, затем в диалоге добавления сценария – кнопку OK, затем в окне свойств – снова OK.

Примерный текст скрипта install.vbs:

' Дополнить значение нулём, если количество символов меньше двух
Function LeadZero(Value)
  LeadZero = CStr(Value)
  If Len(LeadZero) < 2 Then
    LeadZero = "0" & LeadZero
  End If
End Function

' Получить текущую дату и время в формате "ГГГГ.ММ.ДД чч:мм:сс"
Function GetFormatNow()
  DT = Now()
  GetFormatNow = CStr(Year(DT)) & "-" & LeadZero(Month(DT)) & "-" & LeadZero(Day(DT)) & "_" & LeadZero(Hour(DT)) & "-" & LeadZero(Minute(DT)) & "-" & LeadZero(Second(DT))
End Function

'++++++++++++++++++++++++
'+                      +
'+   Изменяемая часть   +
'+                      +
'++++++++++++++++++++++++
' Это код продукта для КЧ 5.5. Для других продуктов будет другой код.
ClientProductCode = "{676C46DB-98C5-40A2-B5D5-525381A787B3}"
' Версия КЧ
ClientVersion = "5.51.1012"
' Папка с лог-файлами
LogsFolder = "\\SERVER\Logs\"
' Папка с инсталлятом
InstallFolder = "\\SERVER\Distrib\Client551_1012\"
'++++++++++++++++++++++++++++++
'+                            +
'+   Конец изменяемой части   +
'+                            +
'++++++++++++++++++++++++++++++

Set Installer = Wscript.CreateObject("WindowsInstaller.Installer")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Env = WshShell.Environment("PROCESS")
ComputerName = Env("COMPUTERNAME")
DoInstall = True

On Error Resume Next

' Удалить предыдущую версию КЧ.
'Info = installer.ProductInfo(ClientProductCode, "InstalledProductName")
CurrentVersion = installer.ProductInfo(ClientProductCode, "VersionString")
If Err.Number = 0 Then
  If CurrentVersion < ClientVersion Then
    Return = WshShell.Run("msiexec.exe /X " & ClientProductCode & " /qb /L*vx! """ & LogsFolder & ComputerName & "_" & GetFormatNow() & "_Client" & CurrentVersion & "_del.log""", 1, true)
  Else
    DoInstall = False
  End If
End If

' Установить новую версию КЧ.
If DoInstall Then
  Return = WshShell.Run("msiexec.exe /i """ & InstallFolder & "Client.msi"" /qb /L*vx! """ & LogsFolder & ComputerName & "_" & GetFormatNow() & "_Client" & ClientVersion & "_inst.log""", 1, true)
End If

Т.е. вначале удаляется текущая версия КЧ, а потом ставится новая.

Имена логов подобраны так, чтобы их легко можно было отсортировать по имени компьютера и времени установки. Для каждого удаления/установки создаётся новый лог-файл (не перетирает старый), а при удалении ещё и сразу видно, какая версия была удалена.

Нужно заменить значения переменных в изменяемой части скрипта на актуальные.

Для папки с логами нужно выдать следующие права:

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

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


То же самое необходимо проделать с папкой для инсталлята (в нашем примере это «C:\Distrib» и сетевой путь «\\SERVER\Distrib»), но вместо полных прав для компьютеров домена можно дать только «Чтение и выполнение».

Особенность работы

Скрипт будет выполняться каждый раз при запуске компьютера. Если пользователь удалит КЧ вручную, то при следующей загрузке у него КЧ поставится заново. А для обновления на новую версию КЧ достаточно просто подменить сам скрипт, не меняя политики AD (в скрипте нужно исправить номер версии и имя папки).

Отличие такой настройки от стандартной (только MSI-пакет без промежуточного скрипта):

  • Запуск скрипта происходит сразу при загрузке компьютера, но в это же время пользователь уже может входить в систему.

Есть и минусы такой схемы:

  • Пользователь может зайти раньше, чем будет установлен продукт. Тогда ему нужно немного подождать, пока на рабочем столе не появится ярлык для запуска клиентской части.

 

15
Авторизуйтесь, чтобы оценить материал.
3
Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий