Автоматизация на CMD/BAT или как я свой любимый велосипед изобретал
реклама
Сегодня хочу вам написать про мой "велосипед" и про то, как я его изобретал. Прошу отнестись просто как к старой истории, а не руководству к действию, но тем не менее этой статьей я хочу отправить в свободное плавание свое творение.
реклама
Итак, входные данные - в офисе порядка 100 компьютеров под управлением Windows XP Home, с редкими вкраплениями Pro - около 5-7 шт. Плюс есть удаленные сотрудники, которым надо подготавливать ноутбуки перед отправкой.
Задача стоит:
- подготавливать компьютеры к работе, установить программы, настроить интерфейс и параметры системы.
- держать программное обеспечение в актуальном состоянии, следить за здоровьем системы, проводить инвентаризацию.
реклама
Поскольку компьютеров много, к каждому бегать не сильно хочется, это заняло бы много времени, мешая, к тому же, работе пользователя.
В домен такие компьютеры не включить, стороннее ПО покупать денег не давали. Кроме того, Home версия Windows XP не поддерживала WMI, что дополнительно несколько усложняло жизнь. Уже с приходом Vista, в домашнюю версию WMI включили.
Со временем, парк стал заменяться частично на машины под управлением Windows 7, затем 8, 8.1 и 10, но сейчас не об этом. C чего все началось?
Первым решением было создание батника, где было прописано, что ставить и откуда. Путь к батнику прописывался в автозагрузку на каждом компьютере. Этот метод просуществовал достаточно долго и имел ряд недостатков, главным из которых было то, что черное окно коммандной строки при запуске системы мозолило пользователю глаза и его часто просто закрывали. К тому же, прописывать путь к каждой программе с именем файла и расширением было не изящно, а хотелось универсальности. Ехал я как то долго в метро, заняться не чем было в дороге, и пришло мне в голову, какая должна быть логика программы и что она должна была делать. Дело за малым - написать надо. Я не программист, но бАтанику немного знаю. Поэтому, решил писать на все тех же bat/cmd. Поскольку, с приходом Vista, мы все познакомились с таким инструментом как UAC, мне потребовалось также запускать мою утилиту от имени администратора. На помощь пришла программа bat2exe, за авторством F2KO Software.
реклама
Она позволяла скомпилировать bat файл для запуска в скрытом виде, и, с административными полномочиями. Подозреваю, все же программа просто упаковывала в SFX архив, т.к. во время исполнения такого exe'шника, в папке %TEMP% появлялся оригинальный батник.
Программу решил назвать Zombee, поскольку компьютеры должны были быть ведомыми чужой волей – волей администратора. Для меня понятие зомби – это что-то из книг Перумова о некроманте Неясыть, а не современное представление о них.
Чем вообще, по-простому, могут отличаться компьютеры в одной сети кроме железа? Операционной системой, разрядностью ее и территориальным подразделением сотрудника, за ним работающего – например Marketing.
Был создан отдельный самба сервер, на нем шара zombee$ (знак $ на конце означает, что шара скрытая, это нужно было на всякий случай, чтобы любопытные не лазили смотреть)
реклама
В папке с шарой создается папка с осмысленным названием, например, floor3 и ярлык floor3. Можно еще floor2 и region создать, у нас компьютеры распределены на 2 этажа были. Региональным сотрудникам отдельная папка. В каждой из них, кроме region, еще 4 папки – install, on, offline и periodic. В папке region только 1 папка – install, поскольку они не оставались в офисе, уезжали в поля на растерзание пользователям и под их управление.
Каждая их этих папок могла содержать в себе папку с именем – версией ядра nt, например 6.1 или папку all, если при запуске параметр определения типа операционной системы был выключен.
Далее, внутри папки all, находится папка x86 обязательно, или 2 папки x86 и x64, если включено определение архитектуры. Определяется по существованию папки "C:\Program Files (x86)".
Наконец, в этой папке (x86 или x64) находятся файлы, которые исполняются на конечном компьютере. Имеют следующий вид:
Т.е. произвольное имя, пользователь, от которого будет запуск программы и тип файла. Да, от имени системы тоже можно запустить. Поддерживаемые типы файлов – cmd,reg,msi,vbs,exe.
При большом желании, можно добавить еще что-то достаточно просто.
К сожалению, XP Home настолько убога, что тут все равно приходилось после установки лезть в планировщик задач исправлять от чьего имени должна запускаться системная задача. Интерфейс коммандной строки не позволял правильно создать задачу.
Вписать, кстати, надо было NT AUTHORITY\SYSTEM
Вернемся к тем 4 папкам:
Install – для первичной установки утилиты в системе, установки программ на подготавливаемый компьютер.
Ярлык для установки, выглядит примерно так:
\\soft-srv\zombee$\zombee.exe soft-srv floor3 60 disable disable install
Тут явно указано, что адрес сервера soft-srv, запускать надо будет с периодичностью (то, что находится в папке periodic) раз в час. При этом не проверять архитектуру и версию ОС.
Во время первичной установки создаются задания в планировщике задач.
On – запуск задания в соответствии с заданными параметрами.
Offline – можно использовать для ноутбуков, если в офисной сети используется прокси сервер, а пользователь убежал с ним куда-то далеко. Следующим же запуском задания выполнятся скрипты, расположенные в %systemroot%\offline\, например, применится reg файл, отключающий прокси-сервер в настройках IE.
Пару раз код немного правил, например, в первой версии было так
dir /b %actionpath%\*.%usertype%.%filetype% > %temp%\zombee.tmp
For /F "eol=; tokens=1* delims==" %%i In (%temp%\zombee.tmp) Do %action% %actionpath%\%%i %opt%
del %temp%\zombee.tmp /f /q
т.е. производилась запись на диск, что мне очень не нравилось, но я нашел решение
SETLOCAL EnableDelayedExpansion
SET /A c=1
FOR /F "tokens=*" %%F in ('dir /b %actionpath%\*.%usertype%.%filetype% %svnLOCAL%') DO (
%action% %actionpath%\%%F %opt%
SET dir_!c!=%%F
SET /a c=c+1
)
ENDLOCAL
Проблемы начали появляться где-то в конце 2018, начале 2019 г., когда моя утилита стала детектироваться как что-то подозрительное встроенным антивирусом Windows 10, пришлось в исключения массово добавлять. Подозреваю, из-за компилятора. Но, свою службу программа сослужить успела.
При написании утилиты было использовано множество источников для решения той или иной задачи, сейчас, по прошествии стольких лет концов уже не найти, все равно, спасибо всем вам!
Надеюсь, кому-то, моя утилита еще понадобится. Хотя бы также, в роли куска кода из нее.
Спасибо и всем тем, кто дочитал до этого места!
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила