
Встала задача - обновить наш антивирус. С версии 10.6 на версию 10.6 Service Pack 1. В принципе, это достигается при помощи внутренних средств обновления, но мне захотелось поднять полностью новый сервер и перевести клиентов на него. Потому как работа старого меня не устраивала, даже бекапы базы данных не делались, валились с ошибкой. Впрочем, это не удивительно, сервер этот был последовательно обновлен с 10 до 10.6. Наверняка уже столько хвостов осталось, что ужас. В общем - чистая установка - как всегда, лучший выход.
С самой установкой и настройкой проблем вообще никаких. С переносом клиентов, которые на текущий момент активны - тоже. А вот что делать с теми машинами, которые могут месяцами не включаться? Их ведь просто так не перетащишь, команду не дашь с административной консоли. Что ж, такую задачу решать уже доводилось - придется воспользоваться сценариями запуска компьютеров. В итоге клиент сам после запуска переползет, куда надо.
Основа сценария - маленькая утилитка IpXFer, которая и пинает клиента в нужную сторону. Выполняется на целевом клиенте с соотвествующими ключами от имени администратора или самой машины (если речь о сценарии запуска). Одновременно с этим не мешало бы проверять - а не переехал ли клиент уже на новый сервер. Ведь если он там - повторно перекидывать его туда не надо.
Начнем с проверки. Кучу своих настроек клиент Trend Micro Office Scan хранит вот тут:
HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\PC-cillinNTCorp\CurrentVersion
Нас очень сильно интересует параметр Server, в котором и прописывается "место жительства" клиента. Выполнив команду
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\PC-cillinNTCorp\CurrentVersion" /v Server
получаем требуемое.
Теперь полученное нужно проверить - что же там лежит. Ради интереса воспользовался вот таким методом:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\PC-cillinNTCorp\CurrentVersion" /v Server | findstr "%ServerName%"
Сначала мы получаем значение параметра Server, затем в полученном пытаемся найти имя нашего сервера. Если найдем, все в порядке. Если не найдем - получим ошибку в системной переменной %ErrorLevel%. Следующий шаг - проверка этой переменной. Если она равна нулю - не делать ничего, клиент уже на "месте прописки". Если же не равно нулю - значит клиент у нас бродяжничает, и его пора пришпилить на место.
Отдельный вопрос - x64 системы. У них расположение нужного нам ключа реестра немного отличается:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TrendMicro\PC-cillinNTCorp\CurrentVersion
Следовательно, нам нужно будет еще проверять, на каком типе систем исполняется скрипт. Ну а потом, после всех проверок, запустить нужную утилитку с кучей параметров.
Целиком весь сценарий будет выглядеть вот так:
echo off
if exist "%systemdrive%\program Files (x86)" (goto x64) else (goto x86)
:x86
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\PC-cillinNTCorp\CurrentVersion" /v Server | findstr "%ServerName%"
if NOT %errorlevel% == 0 call \\server\share\ipxfer.exe -s %ServerName% -p %HTTP_Port_Number% -m 1 -c %Client_Port_Number%
goto rest
:x64
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TrendMicro\PC-cillinNTCorp\CurrentVersion" /v Server | findstr "%ServerName%"
if NOT %errorlevel% == 0 call \\server\share\ipxfer_x64.exe -s %ServerName% -p %HTTP_Port_Number% -m 1 -c %Client_Port_Number%
:rest
Обработка напильником - стандартная. Вместо %ServerName%, %HTTP_Port_Number%, %Client_Port_Number% подставить нужные значения и положить обе утилитки ipxfer и ipxfer_x64 в какую-либо общую папку, куда могут обратиться компьютеры домена.
P.S> После обновления клиента у него меняется значок. Кто-то из "бдительных" пользователей это заметил и тут же начал трезвонить в IT отдел - "Помогите, у меня на компьютере вирус под названием Trend Micro Office Scan!". Ирония в том, что сотрудник сам не знает, на сколько же он прав...