Удаленная установка программ на 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 на очередной компьютер.
Поделиться публикацией

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 14

    –1
    После установки и однократного использования вы же UltraVNC не удаляете? То есть постепенно оно и так на всех компьютерах появится. Может, стоило тогда сразу через GPO этот софт распространить? Не рассматривали UltraVNC в варианте «Single Click», чтобы обойтись без установки?

    А вообще «тихая» централизованная установка софта, не имеющего msi-пакета — та еще заноза в заднице :) Не люблю это дело, скриптами установку делать всегда неудобно и трудоемко.
      0
      Скорее всего, до использования групповых политик руки дойдут только при необходимости обновить программу на всех компьютерах. :) К «Single Click» сильно не приглядывался — сам пользовался обычным UltraVNC задолго до применения его на работе, так что взял то, что было привычнее.
        0
        Не надо до них доходить ;)
        В случае если компания и её бюджет небольшие:
        У вас в компании как минимум есть (должен быть) антивирус — корпоративные версии большинства антивирусов имеют консоль управления их которой можно ставить в том числе и сторонний софт.

        В противном случае — купите специализированное ПО для инвентаризации, управления ПК и массовой установки ПО — головной боли станет меньше.
          0
          Компания не то чтобы сильно маленькая, однако на антивирус с консолью управления (NOD32 v.4) мы перешли несколько позже, чем возникла необходимость установки. Теперь-то вариантов обновления-установки уже гораздо больше, да.
      +2
      Есть очень хорошая утилита для удаленного выполнения команд — PsExec. Написана Марком Руссиновичем. Windows XP поддерживается тоже. Вот ссылка: technet.microsoft.com/ru-ru/sysinternals/bb897553.aspx

      Не нужно никаких дополнительных утилит. Надеюсь поможет. =)
        0
        Спасибо, знаком с этой штукой. Помочь не поможет, потому что и так уже сделано и работает. А так, конечно, годная альтернатива.
          +3
          Программы Руссиновича и К, пожалуй, это первое что надо смотреть, чтобы значительно облегчить себе жизнь в среде от Майкрософта.
          0
          эм. 2003 сервер? в эпоху Windows Server 2008-2012(R2)… простите, а 2003 сервер то еще поддерживается?
          а то я вот 2003 сервер уже лет 5 как не видел в продакшене, даже у самых инертных и забюрократизированных компаний…
            0
            Поддержка серверной ОС еще год продлится, кажется. Не уверен, правда, что у нас кому-то будет до этого дело.
            –1
            Не является ли UltraVNC сторонней утилитой?
            По заголовку статьи подумал, что ваш рассказ будет про PSRemoting
              0
              UltraVNC, разумеется, является сторонней программой, но мы именно ее устанавливаем без участия каких-либо сторонних утилит. Боюсь, для PSRemoting пришлось бы для начала накатывать PowerShell на все компьютеры с Windows XP.
                0
                Точно, извините, значит все же статья про установку ПО с использованием schtasks, все скрыл кат
                schtasks /create /s %CompName%
              0
              У себя делал через wmi, работало и в Windows Server 2000.
              wmic.exe /node:'%%i' /user:'%AD_USER%' /password:"PASSWORD" process call create "%remote_exe%"

              Так же существует проблема, когда сервер находиться в DMZ (RPC порты по-умолчанию динамические)
                –1
                просто включал telnet. и не надо изобретать велосипедов.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое