Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Тихое развертывание ПО - из консоли - с файлового сервера (http://forum.oszone.net/showthread.php?t=222702)

Zorge.R 12-12-2011 11:47 1813681

Тихое развертывание ПО - из консоли - с файлового сервера
 
Вложений: 1
Периодически возникает необходимость развернуть набор ПО на одном или ряде ПК, это можно сделать различными способами, в разных ситуациях администраторы используют тот или иной, удобный им в данном конкретном случае.

Хочу поделиться одним из способов, который я периодически применяю (есть много других способов, это один из них. он не заменяет SCCM, etc, он дает альтернативу).

Резюме: Это самописный скрипт, который после запуска выполняет поочередно скрипты (тихой установки) в определенной директории и выводит информацию в графическом виде, вот так:

После установки последнего приложения, включается таймаут на 120 секунд и консоль закрывается.
Есть идеи по оптимизации кода и улучшениях алгоритма работы, например добавление уведомлений и ведении логов, но пока немного не до этого, я думаю что решение конкретной задачи, должно быть быстрым и эффективным, а сюси пуси можно оставить на потом.

Но, ближе к сути.

Весь набор, состоит из:
\install_all.bat - тело основного скрипта, запуск которого инициирует установку всего ПО и выводит процесс в консоль.
\uac_off.bat - скрипт, отключающий UAC. Пока не используется, создан на перспективу обновления install_all.bat
\uac.off.reg - ключ реестра, отключающий UAC. Инъекцию ключа выполняет uac_off.bat
\distr.cmd - каталог со скриптами установки.
\distr.cmd\*[1.bat-14.bat в текущем примере] - скрипты установки.

------
code:
------

install_all.bat:
Код:

@echo off

REM GLOBAL

set      top=?????????????????????????????????????????????
set stat_uns=?        ? ?
set stat_50p=?????    ? ?
set stat_sec=????????????
set      mid=?????????????????????????????????????????????
set      end=?????????????????????????????????????????????
set  appname=??                              "
set      num=0
set    app_1=?? Link and stuff               
set    app_2=?? MS Office 2010               
set    app_3=?? Adobe Acrobat Reader 10     
set    app_4=?? ABBY FineReader 10           
set    app_5=?? Adobe Flash 10               
set    app_6=?? Java 7 JRE                   
set    app_7=?? FREE Commander               
set    app_8=?? VideoLAN                     
set    app_9=?? WinRAR 4.01                 
set  app_10=?? KAV WKS 6.04                 
set  app_11=?? KAV Agent 8.04               
set  app_12=?? DotNet Framework 1.0-4.0     
set  app_13=?? 1C Enterprise v8.1           
set  app_14=?? Consultant Plus             
set  append=??                              "
set  endnum=14

REM DROP
for /L %%i IN (1,1,%endnum%) DO (
set app_%%i_stat=%stat_uns%
)

REM WORK
for /L %%i IN (1,1,%endnum%) DO (
set app_%%i_stat=%stat_50p%
call :render
call "\\sr-datastore-323\_distr\!install_dir\distr.cmd\%%i.bat"
set app_%%i_stat=%stat_sec%
)

TIMEOUT /T 120
@echo on
exit

:render
cls
echo.
echo %top%
echo %app_1%%app_1_stat%&echo %mid%
echo %app_2%%app_2_stat%&echo %mid%
echo %app_3%%app_3_stat%&echo %mid%
echo %app_4%%app_4_stat%&echo %mid%
echo %app_5%%app_5_stat%&echo %mid%
echo %app_6%%app_6_stat%&echo %mid%
echo %app_7%%app_7_stat%&echo %mid%
echo %app_8%%app_8_stat%&echo %mid%
echo %app_9%%app_9_stat%&echo %mid%
echo %app_10%%app_10_stat%&echo %mid%
echo %app_11%%app_11_stat%&echo %mid%
echo %app_12%%app_12_stat%&echo %mid%
echo %app_13%%app_13_stat%&echo %mid%
echo %app_14%%app_14_stat%
echo %end%

REM GLOBAL - глобальные переменные.
Имена пакетов установки, пока вбиты жестко, в дальнейшем можно сделать перехват имен как параметров.
appname и append нужны тут только для видимости ширины поля и не используются.
блок :render рисует таблицу, по имеющимся параметрам.
REM DROP - сброс статуса всех пакетов в значение stat_uns
REM WORK - делает call \\path\%%i.bat с 1, до endnum, с шагом 1. ставим выполняемому пакету статус 50%, рисуем таблицу, вызываем скрипт, ставим статус 100%, и так далее, пока %%i меньше либо равно endnum
Можно будет провести оптимизацию и делать обход подкаталога захватывая имена пакетов как переменные и не указывая endnum.

install_all.bat отделен от скриптов установки, для удобства чтения кода и работы с ним.
В примере выше, путь \\sr-datastore-323\_distr\ это шаренный каталог на сервере sr-datastore-323. т.е. все файлы, как установки, так и скрипты хранятся на файловом сервере.
\\sr-datastore-323\_distr\!install_dir\ корневой каталог установщика
\\sr-datastore-323\_distr\!install_dir\distr.cmd\ каталог со скриптами тихой установки от 1.bat о 14.bat в текущем примере, номер соответствует "set app_%="
В вашем случае, пути будут другие. Во всех примерах ниже, будет указан сетевой путь до файлов лежащих на этом файловом сервере.
-----------------

\uac_off.bat - скрипт выполняющий инъекцию в реестр
Код:

@echo off

cls
echo  ?????????????
echo  ?  UAC off  ?
echo  ?????????????

regedit /s \\sr-datastore-323\_distr\_corp\_lnk\uac.off.reg

echo DONE!
echo Will restart at:
TIMEOUT /T 5
shutdown /r

@echo on

а это сам ключ реестра, путь на который указан выше \uac.off.reg:
Код:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLUA"=dword:00000000

---------------

Каталог distr.cmd:

Всё ПО ставится в тихом режиме, никаких действий выполнять не требуется, установка проходит все пункты поочередно и отображает процесс в консоли.

? Link and stuff - выполняем всякие полезные штуки, создаем ярлыки и т.д., кому что надо:
Код:

if exist "C:\Users\Public\Desktop\desktop.ini" (
echo sys.Win7
copy "\\sr-datastore-323\_adm\_distr\_corp\_lnk\Корп. почта - Web.url" "C:\Users\Public\Desktop\Корп. почта - Web.url"
copy "\\sr-datastore-323\_adm\_distr\_corp\_lnk\КСД - Комплексная Система Документооборота.url" "C:\Users\Public\Desktop\КСД - Комплексная Система Документооборота.url"
) else (
echo sys.WinXP
copy "\\sr-datastore-323\_adm\_distr\_corp\_lnk\Корп. почта - Web.url" "C:\Documents and Settings\All Users\Рабочий стол\Корп. почта - Web.url"
copy "\\sr-datastore-323\_adm\_distr\_corp\_lnk\КСД - Комплексная Система Документооборота.url" "C:\Documents and Settings\All Users\Рабочий стол\КСД - Комплексная Система Документооборота.url"
)

? MS Office 2010 - установка пакета Office собранного "центром развертывания Office":
Код:

"\\sr-datastore-323\_adm\_distr\_corp\office 2010\setup.exe"
? Adobe Acrobat Reader 10:
Код:

"\\sr-datastore-323\_adm\_distr\_corp\AdobeAcrobat Reader\AdbeRdr1000_ru_RU.exe" /msi EULA_ACCEPT=YES /qn
? ABBY FineReader 10:
Код:

"\\sr-datastore-323\_adm\_distr\_corp\FineReader\Setup.exe" /qn
? Adobe Flash 10 - установка обеих версий Flash:

Код:

"\\sr-datastore-323\_adm\_distr\_corp\Adobe Flash\install_flash_player.exe" -install
"\\sr-datastore-323\_adm\_distr\_corp\Adobe Flash\install_flash_player_ax.exe" -install

? Java 7 JRE:
Код:

"\\sr-datastore-323\_adm\_distr\_corp\Java\Java 7\jre-7-windows-i586.exe" /s /NoRestart
? FREE Commander:
Код:

"\\sr-datastore-323\_adm\_distr\_corp\Free Commander\fc_setup.exe" /SP- /VERYSILENT /LANG=Russian /NORESTART
? VideoLAN - происходит простая проверка, установлен ли VLC, если да, произойдет деинсталяция чтобы процесс тихой установки не выдал "ошибку":
Код:

if exist "%ProgramFiles%\VideoLAN\VLC\uninstall.exe" (
"%ProgramFiles%\VideoLAN\VLC\uninstall.exe" /S
TIMEOUT /T 10
)
"\\sr-datastore-323\_adm\_distr\_corp\vlc\vlc-1.1.9-win32.exe" /L=1049 /S

? WinRAR 4.01 - Установка WinRAR и "активация" его ключа:
Код:

"\\sr-datastore-323\_adm\_distr\_corp\WinRAR_4.01_corp\wrar401ru.exe" /s
if exist "%programfiles%\WinRar" (
xcopy "\\sr-datastore-323\_adm\_distr\_corp\WinRAR_4.01_corp\rarreg.key" "%programfiles%\WinRar" /Y
) else (
xcopy "\\sr-datastore-323\_adm\_distr\_corp\WinRAR_4.01_corp\rarreg.key" "%programfiles(x86)%\WinRar" /Y
)

? KAV WKS 6.04:
Код:

"\\sr-datastore-323\KLSHARE\Packages\KavWks 6.0.4.1424\exec\setup.exe" /s
? KAV Agent 8.04:
Код:

"\\sr-datastore-323\KLSHARE\Packages\NetAgent 8.0.2134\exec\setup.exe" /s
? DotNet Framework 1.0-4.0 - установка вот этой прекрасной сборки .net:
Код:

"\\sr-datastore-323\_adm\_distr\_corp\Net_ Framework\Package\DotNet_1.0-4.0.exe" /S
? 1C Enterprise v8.1 - установка 1С, замена nethasp.ini и копирование ярлыков на уже сформированные базы:
Код:

"\\sr-datastore-323\1C81Admin\setup.exe" /s /v/qn
del "%programfiles%\1cv81\bin\conf\nethasp.ini"
copy "\\sr-datastore-323\_adm\_distr\_corp\_nethasp\nethasp.ini" "%programfiles%\1cv81\bin\conf\nethasp.ini"
if exist "C:\Users\Public\Desktop\desktop.ini" (
echo sys.Win7
copy "\\sr-datastore-323\_adm\_distr\_corp\_nethasp\1С Основная база - v8.1.lnk" "C:\Users\Public\Desktop\1С Основная база - v8.1.lnk"
copy "\\sr-datastore-323\_adm\_distr\_corp\_nethasp\1С Тестовая база - v8.1.lnk" "C:\Users\Public\Desktop\1С Тестовая база - v8.1.lnk"
) else (
echo sys.WinXP
copy "\\sr-datastore-323\_adm\_distr\_corp\_nethasp\1С Основная база - v8.1.lnk" "C:\Documents and Settings\All Users\Рабочий стол\1С Основная база - v8.1.lnk"
copy "\\sr-datastore-323\_adm\_distr\_corp\_nethasp\1С Тестовая база - v8.1.lnk" "C:\Documents and Settings\All Users\Рабочий стол\1С Тестовая база - v8.1.lnk"
)

вот пример ярлыка для базы "base" на сервере "sr-1c-125"

"C:\Program Files (x86)\1cv81\bin\1cv8.exe" enterprise /Ssr-1c-125\base

? Consultant Plus - запуск стандартного "установщика" консультанта, вопрос с тихой установкой пока толком не решен, поэтому этот пункт последний в списке, есть идеи по реализации тихой установки окольными путями:
Код:

"\\sr-kncges-323\ConsultantPlus\cons.exe"
---------------------

Есть что изменить в install_all.bat, есть куда улучшать, вижу вектора движения, пока нет особого желания и необходимости.
Приму любые идеи, критику и предложения.

tutitam 15-11-2012 17:00 2026199

Сразу говорю не селен в написании скриптов )) По этой причине и спрашиваю.

Вопрос возник по данному батнику.

Сделал следующие файлы.

Код:

\install_all.bat
Код:

\distr.cmd - каталог со скриптами установки.
В данный файл писать пути к скриптам типа 1.bat, 2.bat, 3bat, и т.д? Или сами пути с ключами тихой установки?

Код:

\distr.cmd\*[1.bat-14.bat в текущем примере] - скрипты установки.
Файл 1.bat должен содержать путь к установочному файлу типа - "\\server\Soft\wrar401.exe" /S /IR
??

На данный момент у меня в файле distr.cmd - прописаны пути до bat файлов.

До этого в distr.cmd были прописаны пути ключами тихой установки. Все конено работает но криво и без построения графика.

Если прописать call "\\server\soft\hiden_install\distr.cmd\" - работает , но криво.
Если оставить call "\\server\soft\hiden_install\distr.cmd\%%i.bat" - отдает "неверно задано имя папки" запускается отсчет в 120 сек.

Как быть то ?

Iska 15-11-2012 17:26 2026219

tutitam, по поводу пакетного файла лучше пишите непосредственно автору.

tutitam 15-11-2012 17:59 2026256

Отправил, но судя по активности автора на форуме, что то мне подсказывает, что ответа возможно придется ждать долго :)

Iska 15-11-2012 23:20 2026505

tutitam, написали именно на почту?

tutitam 16-11-2012 12:02 2026716

Iska, И на поту в том числе.

tutitam 16-11-2012 18:23 2026939

C выше описанной проблемой разобрался, все дело в том, что не внимательно читал пост автора.

Но все же остается вопрос - почему то не отрисовывается график, выдает кракозябру.

tutitam 20-11-2012 15:08 2028947

Проблема решена.
Для того чтобы корректно отрисовывалась таблица, скрипт нужно сохранять в кодировке ОЕМ 866.

Спасибо Zorge.R., помог разобраться.


Время: 18:26.

Время: 18:26.
© OSzone.net 2001-