Автоматизация MS Windows, или AutoIt как мечта эникейщика. Часть 2::Журнал СА 5.2005
www.samag.ru
Льготная подписка для студентов      
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

Jobsora


  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
28.05.2019г.
Просмотров: 2302
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 2291
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 1836
Комментарии: 0
Django 2 в примерах

 Читать далее...

28.05.2019г.
Просмотров: 1356
Комментарии: 0
Введение в анализ алгоритмов

 Читать далее...

27.03.2019г.
Просмотров: 1873
Комментарии: 1
Arduino Uno и Raspberry Pi 3: от схемотехники к интернету вещей

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Автоматизация MS Windows, или AutoIt как мечта эникейщика. Часть 2

Архив номеров / 2005 / Выпуск №5 (30) / Автоматизация MS Windows, или AutoIt как мечта эникейщика. Часть 2

Рубрика: Администрирование /  Автоматизация

АЛЕКСЕЙ БАРАБАНОВ

Автоматизация MS Windows, или AutoIt как мечта эникейщика
Часть 2

С базовым функционалом AutoIt вы уже познакомились в первой части статьи (см. №4 за 2005 г.) и представляете, как использовать его для автоматизации простейших операций в MS Windows. Расcмотрим применение AutoIt при решении практических задач администрирования.

Локализации

Отправляйте срочную почту ЗАГЛАВHЫМИ БУКВАМИ.

Hаш почтовый сервер ее распознает и отправит быстрее всего!

Отдельно рассмотрим вопрос о приложениях с кириллическими текстами внутри окон. Проиллюстрируем решение этой проблемы на примере установки русифицированной программы. Выберем почтовый клиент Mozilla Thunderbird. Как и в первом случае (см. начало статьи [1]), процедура разработки заключается в том, что запускается специальный перехватчик данных. В версии 3 он называется «AutoIt v3 Active Window Info». За основу разработки берем любой из аналогичных текстов, рассмотренных в [1], из которого в процессе редактирования выкидываем всё лишнее (не забывайте, добродетель сисадмина – лень). Затем устанавливаем наше приложение. Дождавшись первого вопроса к оператору, анализируем, как можно «поймать» это окно в AutoIt. В отношении кириллических текстов есть такая подсказка, что надо пользоваться процедурой «cut-and-paste» для получения правильной кодировки. Но, к сожалению, это не срабатывает. Как видно на рис. 1, попытка перенести текст из «перехватчика» окон в редактор с программой приводит к появлению нечитаемого набора символов. Предположение, что так и должно быть, не выдерживает элементарной проверки.

Рисунок 1

Рисунок 1

Может быть, стоит сменить редактор? Ведь секрет в том, что надо записать в текст скрипта требуемую фразу в оригинальной кодировке. То есть редактор должен позволять точно указывать кодировку документа при сохранении. Из находящихся под рукой подходит MS Word. При этом, как и ожидалось, «cut-and-paste» тоже не приводит к появлению текста в правильной кодировке. Но текст, введенный «вручную», можно сохранить в нужной кодировке. В данном случае предполагаем, что заголовок окна установщика Mozilla Thunderbird написан в cp1251, и поэтому сохраняем текст в кириллице (Windows). Все описанное продемонстрировано на рис. 2.

Рисунок 2

Рисунок 2

В конце первого этапа разработки получаем следующий текст:

AutoItSetOption ( "WinTitleMatchMode", 2 )

AutoItSetOption ( "WinDetectHiddenText", 1 )

WinMinimizeAll ( )

Sleep ( 1000 )

Run ( 'Thunderbird_Setup_1.0.exe' )

WinWait ( 'Mozilla Thunderbird Установка' )

Send ( '{ENTER}' )

MsgBox ( 0, 'AutoIt', 'Done' )

Exit

После запуска эта программа приводит нас к следующему этапу разработки, смотрите рис. 3. Далее все делается аналогично тому, как создавалась программа для установки AutoIt v3.

Рисунок 3

Рисунок 3

Вот что должно получиться в конце концов:

AutoItSetOption ( "WinTitleMatchMode", 2 )

AutoItSetOption ( "WinDetectHiddenText", 1 )

; open free desktop

WinMinimizeAll ( )

Sleep ( 1000 )

Run ( 'Thunderbird_Setup_1.0.exe' )

;Run ( $CmdLine[1] )

WinWait ( 'Mozilla Thunderbird Установка' )

Send ( '{ENTER}' )

WinWait ( 'Установка Thunderbird - Лицензионное соглашение' )

Send ( '{TAB}{SPACE}{ENTER}' )

WinWait ( 'Установка Thunderbird - Тип установки' )

Send ( '{ENTER}' )

WinWait ( 'Выбор компонентов' )

Send ( '{ENTER}' )

; 'Установка Mozilla Thunderbird- Начало установки'

WinWait ( 'Установка Mozilla Thunderbird- Завершение' )

Send ( '{SPACE}{ENTER}' )

;MsgBox ( 0, 'AutoIt', 'Done' )

Exit

Обратите внимание, в итоговом тексте заменяем прямой вызов установщика Mozilla Thunderbird из текста программы на запуск программы, имя и путь до которой переданы, как параметр в командной строке. Так как последнее упростит использование полученного автоматического установщика в рабочих процедурах, где его можно вызывать из командной строки. И блокируем завершающее окно. Еще одно замечание касательно пропущенного окна «Установка Mozilla Thunderbird -> Начало установки». Окно сопровождает процесс непосредственного разворачивания приложения. И можно, конечно, в программе дождаться его завершения, но разумнее просто «поймать» появление следующего окна. Что и было сделано.

Если кодировка кириллицы на экране совпадает с основной кодировкой по умолчанию в MS Windows, то есть cp1251, то можно снова вернуться к использованию Notepad как редактора программ на AutoIt. Кстати сказать, использование точно такого же приема для детектирования окон с текстами в кодировке koi8-r, например, от браузера Интернета, не приводит к успеху. То есть такие окна надо определять по косвенным признакам.

AutoIt – это бот сисадмина

Если сисадмин ест на своем рабочем месте, выложите ему все свои проблемы и ждите немедленного ответа.

Мы существуем, чтобы служить другим, и всегда готовы подумать о починке компьютеров.

Сфера применимости AutoIt не ограничена только автоматизацией установки прикладных программ. Очень эффективно с помощью него программировать наборы стандартных действий в графической среде MS Windows. Многие такие действия инициируются с использованием внутренней команды MS Windows – rundll32. В Сети есть ряд ресурсов, посвященных разгадыванию и коллекционированию информации об этой слабо документированной команде. Начиная с официального описания http://support.microsoft.com/default.aspx?scid=KB;EN-US;q164787& и продолжая существенно более информативным http://www.dx21.com/SCRIPTING. Для примера решим задачу автоматической настройки подключения к VPN. Эта задача интересна тем, что ее приходится выполнять не на внутренней рабочей станции, которая так или иначе доступна для сисадмина, а на приватном компьютере пользователя, который желает получить доступ к офисным ресурсам.

В ручном режиме эти настройки осуществляются с помощью «Мастера сетевых подключений». Последовательность разработки программы, автоматизирующей эту операцию, начинается с поиска на указанных ресурсах способа запустить нужный мастер. Потом, как и ранее, с помощью «перехватчика» окон определяется достаточная для детектирования строка и создается управляющий диалог. Здесь продемонстрируем, как можно воспользоваться параметром, задающим таймаут в секундах. Если WinWaitActive успевает обнаружить нужное окно до истечения таймаута, то возвращает «1», в противном случае – «0». Это позволит в случае ошибочной ситуации просто завершить скрипт. На рис. 4 изображена начальная стадия разработки.

Рисунок 4

Рисунок 4

Вот таким образом, шаг за шагом, напишем маленькую программку, которая создаст нужное соединение и поместит его иконку на рабочий стол. Далее приведен ее текст, где «Office VPN» – это название соединения, а «office.enter-prise.domain» – доменное имя сервера PPtP, доступное из Интернета. Если сервер VPN не зарегистрирован в DNS, то нужно указать его IP-адрес.

AutoItSetOption ( "WinTitleMatchMode", 2 )

AutoItSetOption ( "WinDetectHiddenText", 1 )

AutoItSetOption ( "SendAttachMode", 1 )

; open free desktop

WinMinimizeAll ( )

Sleep ( '1000' )

; network connection wizard

Run ( @ComSpec & " /c rundll32.exe netshell.dll,StartNCW" )

; 1

If WinWaitActive ( 'Мастер новых подключений','','10' ) == 0 Then

  Exit

EndIf

Send ( '{ENTER}' )

; 2

WinWaitActive ( 'Мастер новых подключений', 'Подключить к Интернету','5' )

Send ( '{DOWN}{ENTER}' )

; 3

WinWaitActive ( 'Мастер новых подключений', 'Создать подключение:','5' )

Send ( '{DOWN}{ENTER}' )

; 4

WinWaitActive ( 'Мастер новых подключений', 'Введите в следующем поле имя для этого подключения','5' )

$pptpname = 'Office VPN'

Send ( $pptpname & '{ENTER}' )

; 5

WinWaitActive ( 'Мастер новых подключений', 'Введите имя узла или','5' )

$pptphost = 'office.enterprise.domain'

Send ( $pptphost & '{ENTER}' )

; 6

If WinWaitActive ( 'Мастер новых подключений', 'Успешно завершено создание следующего подключения:', '5' ) == 1 Then

  Send ( '{SPACE}{ENTER}' )

EndIf

Exit

Программка записывается в файл setup_pptp.au3 и затем из нее создается исполняемый файл setup_pptp.exe. Теперь надо позаботиться о передаче этой программы конечному пользователю. Далее будем исходить из условия, что сервер VPN и почтовый сервер созданы на платформе GNU/Linux, а не MS Windows. Это очевидно, учитывая необходимость его работы на открытом для доступа из Интернета сетевом соединении. Предположим, все административные скрипты и данные записываются в /root/bin. Сперва полученная программа упаковывается в архив и копируется в ту же папку:

# zip -9 setup_pptp.exe.zip setup_pptp.exe

adding: setup_pptp.exe (deflated 4%)

# cp  setup_pptp.exe.zip ~/bin

Затем создается простенький скрипт. При настройке логина VPN он будет отсылать осчастливленному пользователю локальное электронное сообщение об этом вместе с присоединенным архивом программы автонастройки. Такой способ передачи позволяет доставить аутентификационные данные безопасным образом. Заодно и архив с программой помещается в почтовый ящик пользователя в обход антивирусных средств, фильтрующих smtp-почту. Поль-зователь должен сохранить письмо и архив на дискете или USB Flash-диске и принести его таким образом на компьютер, где нужно настроить подключение к офисному VPN. Далее останется лишь запустить разархивированную программу, которая настроит соединение, и при подключении указать логин и пароль из текста письма. После выполнения всех манипуляций дискету или USB Flash диск придется уничтожить... Шутка, конечно, но позаботиться об уничтожении информации надо обязательно!

Поскольку сервер VPN сделан на GNU/Linux, то скрипт, который настраивает пользовательский логин на сервере, можно написать на языке интерпретатора bash. Например, так:

#!/bin/sh

FCHAP=/etc/ppp/chap-secrets

UNAME=$1

UIP=$2

( [ "$UNAME" != "" ] && [ "$UIP" != "" ] ) || {

  echo "Use as : $SELF <user-name> <ip>"; exit -1 ; }

D=`cat $FCHAP | grep -e "^$UNAME[[:space:]]"`

[ "$D" == "" ] || {

  echo "User \"$UNAME\" already in database"; exit -1 ; }

T=`getent passwd | grep ^$UNAME:`

[ "$T" != "" ] || {

  echo "Chosed <user-name>=$UNAME not found in passwd"; exit -1 ; }

PSW=`pwgen -c -n 9 1`

H="officepptp"

echo -e "$UNAME\t\"$H\"\t$PSW\t\"$UIP\"" >> $FCHAP

SRV=office.enterprice.domain

cat <<EOT | \

  biabam /root/bin/setup_pptp.exe.zip \

  -s "Extern login for pptp vpn access." $UNAME@localhost

Dear user.

IT staff has prepared extern login to enterprise network using

PPtP VPN for you personally. Tweak PPtP client on workstation

to connect on extern IP-address or FQDN $SRV.

You must login as "$UNAME" with passphrase "$PSW".

Dont forget or loss passphrase ! If this case you must inform

IT staff urgently ! After correction we will send new passphrase

to you by local e-mail.

IT staff.

EOT

exit

Перед вами очень простой скрипт. Он запускается с двумя параметрами – пользовательский логин и адрес, который выделяется для удаленного компьютера при создании криптованного туннеля. Если этот скрипт запускается на компьютере, где создаются VPN-бюджеты для нелокальных пользователей, то проверку «getent passwd» надо исключить. Применение описанной технологии позволяет избежать проблем в тех случаях, когда в ответ на радостное сообщение сисадмина о выделении пользователю логина VPN следует вопрос, «как это настроить», а визит к пользователю домой не входит в планы сисадмина.

Автоматизируем службу поддержки

Если вы столкнулись с сисадмином в выходной день в гастрономе, задайте ему компьютерный вопрос.

Мы работаем 24 часа в сутки 7 дней в неделю, даже в гастрономе в выходной день.

Вплотную к вопросам настройки удаленных подключений примыкают вопросы, точнее, подозрения пользователей о исправности их рабочих станций. Зачастую, когда эти вопросы на самом деле вызваны какими-то проблемами и у сисадмина совершенно нет возможности провести диагностику удаленно, приходится долго втолковывать пользователям по телефону, что и как надо открыть, запустить и посмотреть. Но ведь можно заранее подготовить программу, которая проделает все манипуляции, проверит ответы и напишет резюме. Что нам потребуется, если придется провести удаленную диагностику? Правильно – исправность сети! Именно это и надо проверить автономно и без участия сисадмина. Далее приведен вариант такой программы:

AutoItSetOption ( "WinTitleMatchMode", 2 )

AutoItSetOption ( "WinDetectHiddenText", 1 )

AutoItSetOption ( "SendAttachMode", 1 )

; open free desktop

WinMinimizeAll ( )

Sleep ( '1000' )

; обновим dhcp-адреса

RunWait ( @ComSpec & " /c ipconfig /renew" )

If StringLeft( @IPAddress1, 3 ) == '127' Then

  MsgBox ( 0, 'Network Status',--перенос строки--

 'Неисправен сетевой адаптер или кабель не подключен', 100 )

Else

  If StringLeft( @IPAddress1, 3 ) == '169' Then

    MsgBox ( 0, 'Network Status',--перенос строки--

 'Недоступен сервер или не подключен сетевой кабель', 100 )

  Else

    If StringLeft( @IPAddress1, 10 ) == '192.168.0.' Then

;------ address OK

$i = URLDownloadToFile ( 'http://www.localservernet/'--перенос строки-

 , @MyDocumentsDir & '\tmp.html' )

FileDelete ( @MyDocumentsDir & '\tmp.html' )

If $i == 1 Then

  $j = URLDownloadToFile ( 'http://www.google.com/' ,--перенос строки-

 @MyDocumentsDir & '\tmp.html' )

  FileDelete ( @MyDocumentsDir & '\tmp.html' )

  If $i == 1 Then

    MsgBox ( 0, 'Network Status', 'Сервер исправен.--перенос строки--

 Доступ в Интернет разрешен', 100 )

  Else

    MsgBox ( 0, 'Network Status', 'Сервер исправен.--перенос строки--

 Интернет недоступен', 100 )

  EndIf

Else

  MsgBox ( 0, 'Network Status', 'Сервер не отвечает', 100 )

EndIf

;------

    Else

      MsgBox ( 0, 'Network Status',--перенос строки--

 'Неизвестный адресный диапазон', 100 )

    EndIf

  EndIf

EndIf

Exit

Программа заставляет компьютер заново запросить динамический адрес и по установившемуся значению диагностирует состояние сети. Здесь предполагается, что правильный адрес выдается DHCP из диапазона 192.168.0.0/24. Далее, если локальная сеть работает, делается попытка подключиться к тестовому внутреннему http-ресурсу и затем еще к аналогичному внешнему. Так определяется, «жив» ли внутренний сервер и есть ли доступ к исходящему каналу в Интернет. Число тестов можно расширить. Например, если запрос http://domain.name не проходит, но удовлетворяется запрос по IP-адресу, то можно сделать вывод о проблемах с DNS. Для того чтобы воспользоваться приведенной программой, надо скомпилировать ee в исполняемый файл. Затем поместить результат, например, в директорию, содержащую общий рабочий стол. Таким образом, она будет доступна всем пользователям компьютера. Либо можно поместить ее в персональный рабочий стол в профилях прямо на сервере, что приведет к размножению ее копий по локальным копиям профилей после следующей же перезагрузки. Теперь остается приучить всех пользователей перед истеричным звонком сисадмину запускать эту программу. В первую очередь они должны будут руководствоваться результатами теста, а уже потом эмоциями и предположениями.

Практический пример

Если сисадмин сказал, что придет прямо сейчас, выйдите из сети и отправляйтесь пить кофе

 Для нас не проблема запомнить 2700 сетевых паролей.

Ну что ж, установка программ и выполнение стандартных действий автоматизирована. Как это поможет вам в практической работе? Рассмотрим случай из практики IT-аутсорсинга.

Итак, самое главное в работе сисадмина-аутсорсера – не переработать. Для практикующих этот тяжкий труд показатель успеха прямо пропорционален числу одновременно обслуживаемых рабочих мест. Основным регулирующим фактором становится скорость восстановления рабочих станций. Именно восстановления, а не первоначальной установки. Поэтому будем рассматривать деятельность системного администратора в непрерывном цикле. И в первом приближении надо выполнить два условия.

Во-первых, следует максимально снизить необходимость, как в локальном присутствии сисадмина, так и потребность в удаленном управлении. Для этого дадим полную свободу пользователям в пределах собственного рабочего места – сделаем их локальными администраторами. Скорее всего услышим возражения: это не верно, правильно ограничить права локальных пользователей, научитесь пользоваться политиками и т. д. Безусловно, такая точка зрения имеет право быть. Безусловно, есть предприятия с развитой корпоративной культурой. Но в массе, если речь идет об отечественной индустрии, то сисадмину предоставляется на выбор: открыть курсы компьютерной грамотности за свой счет или предоставить локальным пользователям максимальную свободу. Выберем последнее. Поскольку это делает:

  • локальных пользователей ответственными за состояние собственного рабочего места;
  • избавляет сисадмина от частых визитов по пустякам;
  • создает впечатление независимости деятельности сотрудников обслуживаемого предприятия и избавляет от конфликтов, так как не позволяет им переложить ответственность на сисадмина.

Во-вторых, необходимо обеспечить максимально быстрый способ восстановления рабочих станций и создать условия для удаленного управления локальными рабочими местами. Здесь должно быть все понятно: предоставив пользователям видимость свободы, надо создать средство для ликвидации последствий такой демократизации. Очень часто единственный рациональный путь «лечения» рабочих станций на платформе MS Windows заключается в полной повторной переустановке. Конечно, надо обеспечить сохранение пользовательского окружения, т.е. профиля. Настройка внутренней сети для работы в составе домена Microsoft с перемещаемыми профилями полностью решает задачу сохранения пользовательского окружения и даже позволяет в случае возникновения проблем с некоторыми рабочими местами воспользоваться другими компьютерами взамен поврежденных, как временной мерой.

Получается, что ключевой вопрос – это автоматизированная установка рабочей станции, включая операционную систему и все необходимое для работы прикладное программное обеспечение. Итак, в результате задача свелась к выбору способа автоустановки MS Windows и программ в этой ОС. Почему к «выбору», а не «поиску» или «созданию». Да потому, что автоустановка является штатным свойством этой операционной системы. И ничего тут не надо сочинять и изобретать, ну разве что надо угадывать, так как документация путаная, а многочисленные описания процесса противоречат друг другу. «Выбор» заключается в определении места размещения дистрибутива. Рассмотрим подробнее.

Способы размещения определяются используемым дистрибутивным носителем. Носителей информации ровно столько, сколько предоставляет современная технология. Автору представляется очень изящным решением установка с сетевого носителя, например с tftp, вместе с сетевой загрузкой. Многие системные администраторы практикуют этот способ. На этом экономится как минимум 15-20 у.е. стоимости каждого рабочего места – столько же стоит CD-ROM. Но мы рассматриваем не просто абстрактное администрирование, а аутсорсинг. Здесь нельзя полагаться на какие-то внешние средства, кроме тех, что включены в состав рабочей станции. А вдруг непредвиденное повреждение рабочего места и было связано с проблемами локальной сети. Кроме того, существует совершенно рядовая для современного офиса ситуация, когда надо обеспечить удаленный доступ к внутренним ресурсам не только для сисадмина, но и для других сотрудников. А это значит, что надо, точно так же, как и в офисе, произвести установку типового программного обеспечения и на их персональные компьютеры. Безусловно, приватные визиты могут внести разнообразие в монотонную жизнь системного администратора, но скорее всего включение приватных компьютеров в число оплачиваемых будет отрицательно воспринято заказчиком. Поэтому, выбор в качестве дистрибутивного носителя CD-ROM представляется разумным деловым компромиссом. Тем более что в перспективе можно без излишних проблем перейти на DVD-ROM, значительно увеличив тем самым число устанавливаемых программ. Теперь рассмотрим подробнее процесс установки MS Windows XP Professional SP2 Rus, которую выберем в качестве ОС для создания рабочих станций. Ведь именно этот процесс далее предстоит автоматизировать.

Итак, в следующей части рассмотрим подробнее процесс установки MS Windows XP Professional SP2 Rus, которую выберем в качестве ОС для создания рабочих станций. Ведь именно этот процесс далее предстоит автоматизировать.

Литература:

  1. Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникейщика. Часть 1. – Журнал «Системный администратор», №4, апрель 2005 г. – 11-15 с.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru