Дистанційна установка програм на Windows (XP SP3 і новіші) без використання сторонніх утиліт

Працюючи системним адміністратором, часто стикаєшся з необхідністю віддаленого встановлення будь-яких програм. Щось масове може бути встановлено через групові політики, щось одиничне доводиться встановлювати за допомогою безпосереднього управління цільовим комп'ютером.
 
Однак, з тих пір, як у нашій ультраконсервативній конторі стали з'являтися комп'ютери з більш новою, ніж XP, версією Windows, виникла проблема: віддалений помічник Windows Server 2003 (який тепер нікого, загалом-то, не влаштовував) не міг підключитися до більш пізнім версіями ОС. Звичайно, у нас залишався старий добрий «Віддалений робочий стіл», але іноді адже потрібно побачити саме те, що бачить на своєму робочому столі користувач. При цьому політика безпеки контори вимагала використовувати мінімум стороннього софта.
 
Після довгих пошуків, було встановлено, що підключитися до сеансу Windows 7 з сеансу Windows Server 2003 без будь-якої сторонньої утиліти не вийде. Конкурс на саму безкоштовну утиліту віддаленого управління виграла UltraVNC . Саме на її прикладі нижче буде розглянуто спосіб віддаленої тихої установки програм без використання сторонніх утиліт.
 
 

Постановка завдання

Для все тієї ж мінімізації присутності лівого софта на комп'ютерах підприємства, вирішено було не бути штовхати установку UltraVNC через політики. При цьому не було ніякого бажання на кожен комп'ютер, де потрібна підключитися в сеанс користувача, підключатися через «віддалений робочий стіл» для установки UltraVNC.
 
Так і виникла завдання — організувати віддалену установку програми X на комп'ютер Y на вимогу . В результаті роботи спочатку з'явився на світ файл install.bat , здатний здійснити тиху установку-настройку необхідної програми, а потім був придуманий і спосіб запустити таку установку на віддаленому комп'ютері цілком без використання сторонніх утиліт (remote-install.bat ).
 
 

Тиха установка UltraVNC

Скрипт дозволяє швидко і без зайвого шуму встановити UltraVNC при запуску з адміністраторськими правами на цільовій машині.
 install.bat
@echo off
rem Начинаем новый лог установки
set logfile=install.log
echo %date% %COMPUTERNAME%>%logfile%
echo [%time:~,8%] Установка начата>>%logfile%

set ThePath="%1"
if %ThePath% EQU "" set ThePath="%CD%"

rem Проверяем не 64-битная ли система
set DISTR=UltraVNC1191(x86).exe
if "%ProgramFiles(x86)%" NEQ "" set DISTR=UltraVNC1191(x64).exe

rem Проверяем есть ли установленный сервер в данный момент
dir "C:\Program Files\UltraVNC" >NUL
if %errorlevel% EQU 0 (goto CHECK_VER) else (cls)
echo [%time:~,8%] Установленных версий программы не найдено>>%logfile%
goto INSTALL

rem При наличии установки проверяем соответствует ли версия нужной
:CHECK_VER
echo [%time:~,8%] Найдена установленная версия программы>>%logfile%

type "C:\Program Files\UltraVNC\Whatsnew.rtf" | find "1.1.9.1" >NUL
if %errorlevel% EQU 0 (cls & goto OOPS) else (echo [%time:~,8%] Установленная версия не соответствует актуальной>>%logfile%)

rem Чтобы не было ребутов - останавливаем службу и сносим старые конфиги со всем остальным за компанию
echo [%time:~,8%] Останавливаем службу UVNC_Service>>%logfile%
net stop uvnc_service >NUL
if %errorlevel% EQU 0 (echo [%time:~,8%] Служба UVNC_Service остановлена>>%logfile%) else (echo [%time:~,8%] Не удалось остановить службу UVNC_Service>>%logfile%)

rd /s /q "C:\Program Files\UltraVNC" >NUL
if %errorlevel% EQU 0 (echo [%time:~,8%] Папка установленной ранее версии UltraVNC очищена>>%logfile%) else (echo [%time:~,8%] Не удалось очистить папку ранее установленной UltraVNC>>%logfile%)

rem Начинаем установку: создаем папку, копируем туда заготовленный конфиг с нужными настройками
:INSTALL
md "C:\Program Files\UltraVNC" >NUL && echo [%time:~,8%] Создана папка для установки UltraVNC>>%logfile%
cls

copy /y "%ThePath:"=%\ultravnc.ini" "C:\Program Files\UltraVNC" >NUL
if %errorlevel% EQU 0 (echo [%time:~,8%] Файл настроек сервера скопирован в папку>>%logfile%) else (echo [%time:~,8%] Не удалось скопировать файл настроек сервера>>%logfile%)

rem Запускаем тихую установку
"%ThePath:"=%\%DISTR%" /verysilent /loadinf="%ThePath:"=%\uvncinstall.inf"
if %errorlevel% EQU 0 (echo [%time:~,8%] Сервер UltraVNC установлен>>%logfile%) else (echo [%time:~,8%] Не удалось установить сервер UltraVNC>>%logfile%)
rem Удаляем пункты в Главном меню - чтобы пользователям не мешалось
rd /q /s "C:\Documents and Settings\All Users\Главное меню\Программы\UltraVNC" >NUL
if %errorlevel% EQU 0 (echo [%time:~,8%] Ярлыки удалены из главного меню>>%logfile%) else (echo [%time:~,8%] Не получилось удалить ярлыки из главного меню>>%logfile%)

cls
type %logfile%
echo Сервер UltraVNC установлен
goto :eof

rem Версия соответствует нужной, установка не нужна, выходим
:OOPS
echo [%time:~,8%] Найдена актуальная версия UltraVNC сервера (1.1.9.1)>>%logfile%
cls
type %logfile%
echo Установка не требуется
pause
goto :eof

 

Віддалений запуск тихої установки

Скрипт дозволяє віддалено запустити install.bat з адміністраторськими (користувач SYSTEM) правами.
 remote-install.bat
@echo off
rem Узнаём имя целевого компьютера, проверяем не пустое ли оно
set /p CompName="Введите имя компьютера или IP-адрес: "
if '%CompName%' EQU '' goto :eof

rem Проверяем не установлена ли какая-нибудь версия UltraVNC
dir "\\%CompName%\c$\Program Files\UltraVNC" >NUL && goto CHECK_VER
goto INSTALL

rem Проверяем установленную версию
:CHECK_VER
type "\\%CompName%\c$\Program Files\UltraVNC\Whatsnew.rtf" | find "1.1.9.1" >NUL && goto OOPS
goto INSTALL

rem Копируем папку, в которой находится этот скрипт в C:\Temp
:INSTALL
md \\%CompName%\c$\Temp\UltraVNCServer
xcopy /y "%CD%\*.*" \\%CompName%\c$\Temp\UltraVNCServer >NUL
rem Создаём и запускаем на выполнение задание установки
schtasks /create /s %CompName% /ru system /sc once /tn uvncinstall /tr "C:\Temp\UltraVNCServer\install.bat C:\Temp\UltraVNCServer" /ST "23:30:00"
schtasks /run /s %CompName% /tn uvncinstall

rem Циклично проверяем не завершилось ли задание каждые 5 пингов (секунд)
:CHECK
ping 127.0.0.1 -n 5 >NUL
schtasks /query /s %CompName% | find "uvncinstall" | find "Выполняется" && goto :CHECK

rem Удаляем задание и дистрибутив с комп-а
schtasks /delete /s %CompName% /tn uvncinstall /f
type \\%CompName%\c$\Temp\UltraVNCServer\install.log
rd /q /s \\%CompName%\c$\Temp\UltraVNCServer >NUL
echo Завершено. Проверяйте!
pause
goto :eof

rem Версия-то стоит как раз нужная
:OOPS
echo UltraVNC (1.1.9.1) уже установлен на этот компьютер.
pause
goto :eof

 

Важливе

Щоб уникнути непрацездатності скриптів через непорозуміння з кодуваннями, обидва файли краще зберегти в кодуванні MS-DOS (OEM 866). Також для успішного встановлення програми потрібні:
 
     
відповідно названі дистрибутиви для 32 і 64-бітових систем — UltraVNC1191 (x86). exe і UltraVNC1191 (x64). exe
 заздалегідь заготовлений файл з настройками майбутнього UltraVNC сервера — ultravnc.ini (можна взяти з вже встановленої і настроєної копії програми на будь-якому комп'ютері)
 файл з опціями установки — uvncinstall.inf. У мене він такий:
 
 
[Setup]
Lang=en
Dir=C:\Program Files\UltraVNC
Group=UltraVNC
NoIcons=0
SetupType=server_silent
Components=ultravnc_server_s
Tasks=installservice,startservice

 

Підсумок

Дані bat-скрипти дозволили безперешкодно встановлювати UltraVNC не тільки на комп'ютери з Windows 7, але і на проблемні (з точки зору «віддаленого помічника») комп'ютери з Windows XP, а згодом і на комп'ютери з Windows 8. При бажанні та наявності напилка, за допомогою цих скриптів також можна встановити і інші програми — аби була «тиха» установка.
 
Ключовою особливістю цього способу установки стало саме використання schtasks для створення, запуску і видалення завдань після їх завершення. Інше вміст скриптів — перевірки, перестраховки і всілякі ліниво для мінімізації ручного та розумової праці при необхідності установки UltraVNC на черговий комп'ютер.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.