Установка через запуск самописных скриптов
При выборе данного способа установки учтите его преимущества и недостатки.
Преимущества:
- Более подходящий способ для автоматических обновлений. Не возникнет конфликта, как в случае с Software Installation (в политиках установлена одна версия, но пользователь уже обновил ее на другую).
- Можно использовать не только MSI-пакет, но и exe-установщик.
- В случае установки на одного пользователя можно запустить установщик с «базовым» интерфейсом. Пользователь будет видеть процесс установки, но диалоговых окон с выбором не будет.
- Параметры для MSI-пакета можно задать как с помощью mst-файла, так и напрямую в командной строке.
- Можно настроить более удобное логирование процесса.
Недостатки:
- В скрипте должна быть учтена дополнительная логика. Например, перед началом установки нужно проверять наличие ранее установленной версии, для этого в скрипте нужно самостоятельно вписывать новую версию.
- Появляется необходимость следить за дополнительными параметрами. Например, при смене контекста установки важно не забыть в скрипте поменять параметр
ALLUSERS. - Администратор не может удалить приложение через групповые политики (разве что еще одним скриптом).
Пример 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_ROOTStart-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.