Как известно, при установке через 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-пакет без промежуточного скрипта):
Есть и минусы такой схемы:
Авторизуйтесь, чтобы написать комментарий