Установка через запуск самописных скриптов
Что нужно учесть
При выборе данного способа установки учтите его преимущества и недостатки.
Преимущества:
- Более подходящий способ для автоматических обновлений. Не возникнет конфликта, как в случае с Software Installation (в политиках установлена одна версия, но пользователь уже обновил ее на другую).
- Можно использовать не только MSI-пакет, но и exe-установщик.
- В случае установки на одного пользователя можно запустить установщик с «базовым» интерфейсом. Пользователь будет видеть процесс установки, но диалоговых окон с выбором не будет.
- Параметры для MSI-пакета можно задать как с помощью mst-файла, так и напрямую в командной строке.
- Можно настроить более удобное логирование процесса.
Недостатки:
- В скрипте должна быть учтена дополнительная логика. Например, перед началом установки нужно проверять наличие ранее установленной версии, для этого в скрипте нужно самостоятельно вписывать новую версию.
- Появляется необходимость следить за дополнительными параметрами. Например, при смене контекста установки важно не забыть в скрипте поменять параметр
ALLUSERS
. - Администратор не может удалить приложение через групповые политики (разве что еще одним скриптом).
Пример PowerShell-скрипта
Пример PowerShell-скрипта, который выполняет установку/обновление с учетом предыдущих версий:
######### Входные параметры
# Новая версия, нужно менять при каждом обновлении
# (еще вариант - парсить из имени файла)
$NewAppVersion = "24.4.0.42791"
# Путь до MSI-пакета, в данном случае использует версию
$PathToMsi = "\\WINDOWS-BASIC-1\MyShared\vkteams.$NewAppVersion.msi"
# Путь до файла с настройками прокси (если нужно)
$PathToProxyIni = "\\WINDOWS-BASIC-1\MyShared\proxy template.txt"
$CurrentDate = Get-Date -Format "yyyymmdd_hhmmss"
# Путь до файла логов
# (при установке на всех пользователей нужно поменять на C:\Windows\Temp\)
$PathToLogFile = "$env:LocalAppData\Temp\install_$CurrentDate.log"
######### Попытка определить версию установленного ранее приложения
$CurrentAppVersion = ""
$ProductPath = "VK Teams"
$Installer = New-Object -ComObject WindowsInstaller.Installer;
$InstallerProducts = $Installer.ProductsEx("", "", 7);
$InstalledProducts = ForEach($Product in $InstallerProducts)
{
[PSCustomObject]@{VersionString = $Product.InstallProperty("VersionString");
ProductPath = $Product.InstallProperty("ProductName")}
};
foreach ($product in $InstalledProducts)
{
if ($product.ProductPath -eq $ProductPath)
{ $CurrentAppVersion = $product.VersionString }
}
######### Запуск установки, если приложение не найдено, либо его версия меньше новой
if (-not $CurrentAppVersion -or $CurrentAppVersion -lt $NewAppVersion)
{
# Параметры можно изменить, удалить, либо добавить новые по аналогии
# например INSTALL_ROOT
Start-Process -FilePath "msiexec.exe" -ArgumentList `
"/i `"$PathToMsi`"", `
# Контекст установки. По умолчанию - на одного пользователя.
# Раскомментировать для установки на всех пользователей
#"ALLUSERS=1", `
# Настройка автоматических обновлений
"AUTOUPDATES=1", `
# Настройка прокси. Раскомментировать, если нужно
#"PROXY_INI=`"$PathToProxyIni`"", `
# Тихая установка. В случае установки на одного пользователя можно поменять на /qb
# (базовый интерфейс с прогрессом установки)
"/q", `
# Логирование
"/L*V `"$PathToLogFile`""
}
Включение политики запуска скрипта
При установке на всех пользователей
- Создайте политику и привяжите ее к нужным компьютерам.
- Откройте окно редактирования политики.
- Выберите корневой раздел: Computer Configuration.
- Перейдите в подраздел Policies → Windows Settings → Scripts.
- Двойным кликом по Startup откройте окно добавления скриптов.
- Перейдите на вкладку PowerShell Scripts.
- Добавьте скрипт, указав сетевой путь до него.
-
Подтвердите выполненные действия нажатием на кнопку OK.
При установке на одного пользователя
Предварительно разрешите пользователям выполнять установку от их имени:
-
Перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows Installer.
-
Откройте политику Turn Off Windows Installer, включите её и задайте значение Never.
-
Откройте политику Prohibit User Installs, включите её и задайте значение Allow User Installs.
-
Созданную групповую политику примените не на пользователей, а на компьютеры.
Включите политику запуска скрипта:
- Создайте политику и привяжите ее к нужным пользователям.
- Откройте окно редактирования политики.
- Выберите корневой раздел: User Configuration.
-
Перейдите в подраздел Policies → Windows Settings → Scripts.
-
Двойным кликом по Logon откройте окно добавления скриптов.
- Перейдите на вкладку PowerShell Scripts.
-
Добавьте скрипт, указав сетевой путь до него.
-
Подтвердите выполненные действия нажатием на кнопку OK.