This is an old revision of the document!
Установка exe-setup через LogonScript
Установка через msi-пакет легко автоматизируется с помощью GPO AD. Но что, если msi-пакета нету, а автоматизировать установку очень хочется?
Характерным примером может послужить установка пакета Microsoft Visual C++ Redistributable, который распространяется в виде SETUP.EXE инсталлятора, поддерживающего ключи неинтерактивной установки.
В первую очередь скопируем инсталлятор в папку, откуда устанавливаем обычно msi через GPO AD. Если специальной папки у нас нет - подойдет и стандартный NETLOGON нашего домена:
\\domain.local\NETLOGON\Software\VCredist\vc_redist.x86.exe
Теперь сохраним в PowerShell-файл скрипт:
$Installer = "\\domain.local\NETLOGON\Software\VCredist\vc_redist.x86.exe"
$RequiredVersion = [version]"14.44.35211.0"
$Installed = Get-ItemProperty `
"HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86" `
-ErrorAction SilentlyContinue
if (!$Installed -or [version]$Installed.Version.TrimStart('v') -lt $RequiredVersion) {
Start-Process -FilePath $Installer `
-ArgumentList "/install /quiet /norestart" `
-Wait
}
Данный скрипт не просто установит Microsoft Visual C++ Redistributable с заданными параметрами, но сначала проверит версию и будет выполнять установку только, если установленная версия ниже той, которую мы хотим установить (14.44.35211.0 в данном случае).
Кладем скрипт в общую папку политики, пример:
\\domain.local\SysVol\domain.local\Policies\{4FA484AF-B629-4B3B-A614-F24B0AD07340}\Machine\Scripts\Startup
И добавляем в политику:
Computer Configuration → Policies → Windows Settings → Scripts (Startup/Shutdown) → Startup
Пример:
Если нам требуется применить скрипт только для клиентских машин, имя которых начинается с aaa или fff, можем создать и установить для политики такой фильтр WMI
SELECT * FROM Win32_OperatingSystem WHERE ProductType = 1 AND (CSName LIKE "fff%" OR CSName LIKE "aaa%")
С очевидностью, политика применится после перезагрузки.

