Posts tagged ‘автоматизация’

Puppet: в шкуре кукловода. Часть 1

К моему глубочайшему удивлению, такая отличная и полезная система как Puppet, практически не описана в русскоязычном Интернете. Те статьи что имеются(см. в конце поста) не заходят дальше поверхностного описания установки Puppet и настройки прав на файлы /etc/passwd, /etc/sudoers. Я вижу, что с помощью Puppet я и мои коллеги смогут сэкономить себе кучу времени при установке софта или переносе инфраструктуры на новое железо, поэтому хочу поделиться опытом и описать КАК я это сделаю :).

Что это?

PuppetPuppet – это система управления конфигурациями, инструмент который позволяет автоматизировать настройку и управление большим парком машин, систем, сервисов. Его магия состоит в том что вам достаточно один раз написать “рецепт” по настройке какого-то ПО или опции системы, и вы уже можете тиражировать эти изменения на сколь угодно большое количество серверов, для этого достаточно установить на целевой машине Puppet и произвести маленькую настройку.

Как это работает?

Pupet - system diagram

Есть центральный демон, так называемый pupetmaster(кукловод), у него хранятся данные о настройке сервисов, файлах, шаблонах конфигурации и т.д.
На сервера и рабочие станции под управлением Linux, *BSD, MacOS ставиться puppet(марионетка/кукла), раз в 30 минут этот сервис забирает данные о конфигурации ПО и системы у puppetmaster`а.
Конфигурировать можно практически все: установленные программы, репозитории ПО, права на файлы и папки, пользователей системы, файлы конфигурации, сервисы в системе и т.д. Также функциональность puppet`а можно расширять при помощи модулей или достаточно легко подключаемых плагинов к Facter и самому Puppet.

Устанновка PuppetMaster из репозитория (CentOS/Fedora)

Этот способ установки наиболее предпочтителен, т.к. позволяет в дальнейшем достаточно просто обновляться до новых версий.
Для установки puppetmaster в систему нужно добавить репозиторий EPEL
Создаем файл /etc/yum.repos.d/epel.repo*:

[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
includepkgs=ruby*,puppet*,facter*,augeas*

Далее ставим пакет puppet-server.noarch:

yum install 'puppet*'

Вот и все, просто как палка :). Далее можно переходить к конфигурированию и проверке работы puppet (см. ниже)

Установка PuppetMaster через Gem

Для установки Puppet нужно установить Ruby и Ruby gems (здесь уже на ваш выбор как :)).

Для установки Puppet и Puppetmaster`а нужно установить gem puppet:

gem install puppet

Вместе с puppet будет установлено еще несколько gem`ов по зависимостям.
Теперь нужно прописать puppet в системе, для этого заходим в папку с gem`ом puppet(по идее /opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/puppet-0.25.5, точное расположение папки ruby может быть другим, ставил из сорцов) и выполняем следующие команды по интеграции в систему:

confdir='conf/redhat/'
cp $confdir/client.sysconfig /etc/sysconfig/puppet
cp $confdir/client.init /etc/init.d/puppet
cp $confdir/server.sysconfig /etc/sysconfig/puppetmaster
cp $confdir/server.init /etc/init.d/puppetmaster
cp $confdir/fileserver.conf /etc/puppet/fileserver.conf
cp $confdir/puppet.conf /etc/puppet/puppet.conf
cp $confdir/logrotate /etc/logrotate.d/puppet

Редактируем файл /etc/init.d/puppetmaster:

...
PUPPETMASTER=/opt/ruby-enterprise-1.8.7-2010.01/bin/$prog
...

Редактируем файл /etc/init.d/puppet:

...
puppetd='/opt/ruby-enterprise-1.8.7-2010.01/bin/puppetd'
...

Как видите этот способ установки более длинный и муторный.

Первоначальное конфигурирование puppetmaster (проверка работоспособности)

Создаем тестовый манифест для проверки работоспособности Puppet:

# Создаем файл для проверки
touch /tmp/tmp
chown ftp:ftp /tmp/tmp
chmod 777 /tmp/tmp
# Создаем файл манифест
vim /etc/puppet/manifests/site.pp

Забиваем в site.pp следующие данные:

file { "/tmp/tmp":
    owner => root, group => root, mode => 440
}

Далее запускаем команду:

puppetmaster --verbose --no-daemonize

Мы запускам puppet не как демон, а в полу-интерактивном режиме, с выводом всех происходящих действий в терминал. Должна появиться строчка:

notice: Starting Puppet server version 0.25.5

И на этом все. Теперь открываем еще один терминал к серверу (терминал с puppetmaster`ом не закрываем) и набираем команду

puppetd --verbose --waitforcert 60 --no-daemonize

Таким образом мы запускаем puppet на нашем сервере, в интерактивном режиме как и puppetmaster.
После запуска должны появиться следующие строчки:

notice: Starting Puppet client version 0.25.5
info: Caching catalog for mail.rulimony.ru
info: Applying configuration version '1274869753'
notice: //File[/tmp/tmp]/owner: owner changed 'ftp' to 'root'
notice: //File[/tmp/tmp]/group: group changed 'ftp' to 'root'
notice: //File[/tmp/tmp]/mode: mode changed '777' to '440'
notice: Finished catalog run in 0.02 seconds

Это говорит о том что конфигурация удачно передалась с puppetmaster`а клиенту.

Останавливаем puppetmaster и puppet через Ctrl+c.

Все, puppetmaster и puppet можно запускать:

chkconfig puppetmaster on
chkconfig puppet on
service puppetmaster start
service puppet start

Что это было?

Мы установили Puppet и Puppetmaster на один сервер, создали тестовый манифест (site.pp) который изменяет владельца и права на файл /tmp/tmp.
Дальше нужно ставить puppet на другие сервера (ноды) и создавать настройки конфигурации.
Об этом постараюсь написать в течении недели. А пока советую приглядеться к следующим ресурсам:

Puppet, система управления конфигурациями. Часть I
Puppet, система управления конфигурациями. Часть II
Puppet против Chef: 10 причин, из-за которых выигрывает Puppet
Puppet Docs

Puppet: настройка Puppet fileserver для отдачи файлов и директорий

Что такое Puppet fileserver?

Puppet fileserver – сервис позволяющий забирать с Puppetmaster`a файлы и папки, используемые в вашей конфигурации. С помощью файлсервера, к примеру, вы можете передавать на сервера файл /etc/resolv.conf содержимое которого будет зависеть от $hostname. Лично я использую fileserver для кастомного софта, который не могу установить из репозитория или собирать пакет слишком долго.

Более подробно о возможностях file server можно почитать в официальной документации к Puppet http://projects.puppetlabs.com/projects/puppet/wiki/File_Serving_Configuration

Настройка

Для настройки файлсервер нужно открыть/создать файл fileserver.conf в папке конфигурации Puppet (по умолчанию /etc/puppet/fileserver.conf) и вбить в него следующие данные:

[files1]
path /var/puppet/files1
allow *.domain.com
 
[files2]
path /var/puppet/files2
# needed to allow local puppetd
allow 127.0.0.1
allow 192.168.1.0/24

Мы объявили две секции “files1” и “files2”, параметр path указывает в какой папке нужно искать нужные файлы, параметры allow и deny отвечают за настройки безопасности файл серрвера.

Безопасность

Доступ к секции, по умолчанию, запрещен со всех серверов. Для того чтобы разрешить серверу доступ к секции нужно добавить опцию allow с именем, IP или подсетью. Параметр deny всегда весомее чем параметр allow, т.е. если у вас есть сервер с IP 192.168.0.1 и именем myhost.com то такая конфигурация не позволит вам забрать файлы из файлсервера:

[files3]
path /var/puppet/files/
allow 192.168.0.0/24
deny myhost.com

Использование

Для использования file server вам нужно использовать тип file:

        # Smartfox license
        file{"smartfox_license":
                path => "/opt/Smartfox/Server/licence.sfl",
                source => "puppet://puppet/files/smartfox/licenses/$fqdn/licence.sfl",
        }

Так я передаю файлы лицензий для сокет-сервера Smartfox на целевые машины. Т.е. у меня объявлена секция [files], локальный путь /var/puppet/files. По этому пути я создал папку “smartfox/licenses”, внутри сделал папки с именами хостов (переменная $fqdn содержит полное имя целевого сервера, к примеру smartfox.domain.com), в каждой папке лежит файл с лицензией licence.sfl. Т.е. на целевой сервер smartfox.domain.com в папку /opt/Smartfox/Server/ попадает файл licence.sfl с puppetmaster сервера из папки /var/puppet/files/smartfox/licenses/$fqdn/

Пример выше позволяет передавать только один файл, вот так можно передавать целую папку:

        # Smartfox server bins
        file{"smartfox_bin":
                path => "/opt/Smartfox/Server/",
                source => "puppet://puppet/files/smartfox/Server/",
                ensure => directory,
                recurse => true,
                sourceselect => all,
        }

Главное здесь параметры recurse – говорит о том что мы передает всю папку и подпапки и sourceselect – говорит о том что мы передаем все файлы

                recurse => true,
                sourceselect => all,

Все, можно пользоваться, но помните – если вы используете стандартный Puppetmaster (т.е. он работает не через nginx или Apache а через написанный на Ruby веб сервер Webrick) передача папки большого размера может вызвать подъем LA на сервере.

Puppet: в шкуре кукловода. Часть 2

В прошлой статье я рассказал что такое Puppet, как установить puppetmaster и проверить его работоспособность. В этой я расскажу как подключать ноды, опишу используемую мной организацию манифестов и дам небольшой пример конфигурирования ресурсов на примере описанной в недавней статье утилиты Fail2Ban.

В тексте будут встречаться термины “классы”, “ноды”, “ресурсы” и т.д., для тех кому смысл этих терминов очень важен советую почитать книгу по Puppet Pulling Strings with Puppet: Configuration Management Made Easy, я рассказывал про нее в промежутке между статьями цикла.

В дальнейшем я буду исходить из того что вы используете CentOS, но иногда буду давать ремарки для других ОС.

Добавление puppet ноды

Из соображений безопасности, а также для гарантированной авторизации хостов(нод) Puppet использует самоподписанные SSL сертификаты. Такой сертификат генерируется при первом запуске puppetd (клиента) на сервере, поэтому перед запуском убедитесь что ваш hostname корректен. Далее с помощью этого сертификата puppet пытается соединиться с хостом puppet. или просто puppet. Т.к. SSL сертификаты чувствительны ко времени, возможно вам придется синхронизировать время между серверами при помощи ntp или другого сервиса. Далее описана процедура установки puppet на сервер под управлением CentOS, если вы используете другой тип установки вы можете перейти сразу к самому концу раздела.

Для добавления puppet ноды нужно установить puppet клиент на сервер-ноду, для этого в систему нужно добавить репозиторий EPEL
Создаем файл /etc/yum.repos.d/epel.repo:

[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
includepkgs=ruby*,puppet*,facter*,augeas*

Далее ставим пакет puppet:

yum install puppet.noarch

Теперь прописываем в файле /etc/hosts наш puppetmaster(возможно вы захотите воспользоваться DNS, тогда вам нужно создать домен puppet.):

# <puppetmaster_ip> puppet
1.1.1.1 puppet
</puppetmaster_ip>

Затем включаем автозапуск puppet и запускаем его:

chkconfig puppet on
service puppet start

Переходим на сервер с puppetmaster`ом и выполняем проверяем соединился ли puppet с сервером:

puppetca --list

на выходе будет строчка с hostname нашей ноды, далее нужно подписать ее сертификат:

# puppetca --sign <node_hostname>
puppetca --sign node1.test.com
</node_hostname>

Структура конфигурационных файлов

В терминологии Puppet информация о том что и как нужно сделать называется манифест(manifest) или рецепт(recepe), список уже готовых рецептов вы можете найти на сайте Puppetlabs: http://projects.puppetlabs.com/projects/puppet/wiki/Puppet_Recipes. Здесь же я расскажу как начать создавать такие рецепты, покажу пример структуры рецептов.

Итак приступим. Все рецепты пляшут из одного файла site.pp(/etc/puppet/manifests/site.pp), уже оттуда при помощи директивы “import” вы можете подключать свои конфигурационные файлы. Моя структура католога /etc/puppet/manifests выглядит так:

./classes
./classes/fail2ban.pp
./classes/mail.pp
./classes/yumrepos.pp
./nodes
./nodes/default.pp
./nodes/test.com.pp
./site.pp

Т.е. я создал папку classes, куда я складываю описание классов (еще раз советую почитать книгу по Puppet) и папку “nodes” куда я складываю описание нод. В файл site.pp я вписал две строки в которых делаю импорт файлов в этих папках:

import "classes/*.pp"
import "nodes/*.pp"

Таким образом любой файл с расширением .pp (файл манифеста для Puppet) будет подгружен в систему.

Кофигурирование ресурсов

Теперь собственно можно приступить к конфигурированию, далее мы создадим рецепт которые устанавливает и настраивает утилиту для защиты от брутфорса Fail2Ban и рецепт который будет добавлять в систему mail alias для пользователя root, чтобы пересылать нам его письма.

Fail2Ban

создаем файл classes/yumrepos.pp, в нем мы опишем нужный нам репозиторий (см. подробное описание):

# RPMForge repo
yumrepo { 'rpmforge':
    descr =&gt; 'Red Hat enterprise $releasever - RPMforge.net - dag',
    mirrorlist =&gt; 'http://apt.sw.be/redhat/el5/en/mirrors-rpmforge',
    enabled =&gt; '1',
    gpgcheck =&gt; '0',
    protect =&gt; '0',
    gpgkey =&gt; 'http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt'
}

Думаю здесь излишние описания не нужны.

Теперь описываем класс fail2ban (за подробностями по типам ресурсов сюда):

class fail2ban{
        package { "fail2ban":
                ensure =&gt; latest,
        }
 
        service { "fail2ban":
                ensure =&gt; running,
                enable =&gt; true,
                hasrestart =&gt; true,
                require =&gt; Package["fail2ban"],
        }
 
        file {"fail2ban-conf":
                path =&gt; "/etc/fail2ban/jail.conf",
                owner =&gt; root,
                group =&gt; root,
                mode =&gt; 644,
                content =&gt; template("fail2ban/jail.conf.erb"),
                notify =&gt; Service["fail2ban"],
                require =&gt; Package["fail2ban"],
        }
}

Итак мы убеждаемся что у нас установлен пакет fail2ban последней версии. Затем мы описываем сервис fail2ban, указываем что он должен быть запущен и включен по умолчанию на автозагрузку, также указываем что сервис имеет команду restart (иначе puppet будет сначала останавливать сервис а потом стартовать). Далее описывается конфигурационный файл для fail2ban, первые четыре строки вроде понятны, в пятой используется функция “template”, эта функция по файлу в формате ERB генерирует выходной файл, его то мы и помещаем в наш конфиг. Опция notify означает что нам нужно оповестить сервис о том что файл изменился, т.е. выполнить ему restart.
Теперь подробнее про функцию template, она берет указанный нами файл из папки /var/puppet/templates/ и прогоняет его через ERB (чуть подробнее можно почитать в документации). Т.е. в папке templates я создал папку fail2ban и положил туда подготовленный для него конфиг(см. статью про fail2ban), ERB я в нем не использовал, но для “единобезобразия” всех интерфейса получения конфигов решил использовать именно функцию template.

Mail alias

Теперь создадим еще один ресурс, но уже для управления mail alias`ами в системе. Для этого в папке classes создаем файл mail.pp и записываем в него сл. данные:

class mail{
 
exec{ "newaliases":
    command =&gt; "/usr/bin/newaliases",
    refreshonly =&gt; true,
}
 
#####################################################
#
#  mail_alias - mail aliases in local system 
#
#  recipient - e-mail of recipient
#
#  Example:
#
#  mail_alias{"root":
#       recipient =&gt; "sysadmin@test.com"
#  }
#
#####################################################
define mail_alias($recipient){
        mailalias { $name:
                ensure =&gt; present,
                recipient =&gt; $recipient,
                target =&gt; '/etc/aliases',
                notify =&gt; Exec['newaliases'],
        }
}
}

Мы объявляем новый класс mail, в него я планирую помещать ресурсы связанные с локальной почтовой системой сервера. Внутри класса мы определяем новый ресурс (при помощи ключевого слова “define”) mail_alias. Ресурсу мы передаем email получателя. Для создания алиаса используется стандартный тип Puppet mailalias. Строка “notify => Exec[‘newaliases’]” служит для того чтобы после добавления алиасов выполнялась команда newaliases, описанная выше, параметр refreshonly означает что команда не будет выполнятся при каждом запуске Puppet, а только если ему придет событие notify.

Конфигурирование нод

Вернемся к нашей ноде “node1.test.com”, пришло время применить наши рецепты, для этого в папке nodes создаем файл node1.test.com и записываем туда:

node node1.test.com{
        include "fail2ban"
        mail::mail_alias { 'root':
                recipient =&gt; ['sysadmin@test.com'],
        }
}

Итак мы описали ноду, в ее описание мы включили описание класса fail2ban и определили mailalias для пользователя root. Теперь нужно проверить как это все работает, для этого на главном сервере останавливаем puppetmaster и запускаем его руками с параметрами “–verbose –nodaemonize”:

service puppetmaster stop
puppetmasterd --verbose --no-daemonize

Теперь переходим на ноду и выполняем ту же операцию но уже с puppet:

service puppet stop
puppetd --verbose --no-daemonize

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

Конец

На этот раз все, в следующей статье постараюсь рассказать более подробно про язык (DSL) Puppet`а и возможно про утилиты входящие в состав пакета. Всем очень советую почитать доку к утилите ralsh http://docs.puppetlabs.com/guides/tools.html#ralsh а лучше ralsh –help

Автоматизация, как много в этом слове. AutoIt в примерах.

AutoIT

AutoIT logo

Ну вот и положено начало статьям по автоматизации которые обещал, ну и собственно вторая статья(первая, первая часть вторая). Поразглагольствую об автоматизации работы с Windows приложениями и в частности о AutoIt. Скажу сразу в нем я еще не очень силен, но даже при наличии базовых знаний он может значительно облегчить жизнь.

Где еще почитать по теме?

http://www.autoitscript.com/autoit3/ – официальный сайт AutoIt.
http://www.autoitscript.com/autoit3/docs/functions.htm – официальная же документация по функциям AutoIt.
http://ru.wikipedia.org/wiki/AutoIt – страница об AutoIt в Википедии.
http://forum.ru-board.com/topic.cgi?forum=5&topic=29240 – сообщество на Ru-Board, с большим количеством отличных примеров.

Описание

AutoIt – это скриптовый язык предназначенный для создания макросов к Windows приложениям. И всем бы был этот язык хорошь если бы не был Basic`ом, это его главный и неспоримый недостаток. Не буду спорить сам когда-то писал программки на QBasic, но делалось это для обучения и после себя оставил не очень хорошее впечатление, особенно после знакомства с Pascal и позднее с C. Но, не будем о грустном есть у него и достоинства и они хороши.

Достоинства AutoIt

Первым достоинством можно считать отличный инструментарий для создания скриптов, редактор SciTE с полной поддержкой синтаксиса и библиотек языка, code completion и прочим.
Второе достоинство отличная система справки и просто огромное количество примеров, в которых можно найти почти все.
Третьим и думаю одним из основных является тот факт что можно скомпилировать скрипт в “.exe” файл и затем выполнять на другом компьютере без необходимости установки AutoIt-интерпретатора.

Установка AutoIt

Скачать AutoIT можно отсюда: http://www.autoitscript.com/autoit3/downloads.shtml, лучше всего выбирать полную версию т.к. в ней гарантированно бдет все что вам нужно. Процесс установки прост как все гениальное поэтому описывать его я не буду. По окончании в меню “Пуск”->”Программы” (“Start”->”Programs”) появится новый раздел AutoIt:

Screenshot

AutoIT section

Первый скрипт

Итак напишем маленький, но гордый скрипт. Для работы нам понадобятся два приложения, “SciTE Script Editor” и “AutoIt Window Info”.
Сначала запустите SciTE и вставте туда одну строчку:

Run("notepad")

И нажмите . У вас должен был запустится Notepad. Теперь запустите “AutoIt Window Info”:

AutoIt window info

AutoIt window info

Перетяните прицел из “Finder Tool” на окно запущенного блокнота. Если у вас английская Windows вы получите тот же результат что и у меня на скриншоте. Из всей информации нам понадобится поле “Title”. Копируем его и добавляем в код еще одну строку:

WinWaitActive("Untitled - Notepad")

эта функция ожидает пока фокус передастся окну с заголовком “Untitled – Notepad”. Теперь давайте наберем пару строк и сохраним файл, полный скрипт:

Run("notepad")
WinWaitActive("Untitled - Notepad")
; Few strings
Send("String #1{ENTER}String #2{ENTER}String #3")
; Alt+F+S
Send("{ALTDOWN}(fs){ALTUP}")
; Filename
Send("AUTOMATE_IT.txt{ENTER}")

Функция Send отсылает нажатия клавишь текущему приложению.
– {ALTDOWN}{ALTUP} – зажать кнопку Alt
– {ENTER} – нажать Enter

Полный список клавишь можно найти здесь: http://www.autoitscript.com/autoit3/docs/functions/Send.htm

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

Примеры работы с клавиатурой в AutoIt

“{DOWN 6}” – нажать вниз шесть раз

“!{s}” – Alt+s

“!{X}” – аналогично Alt+Shift+x

“^{w}” – Ctrl+w

“^{W}” – аналогично Ctrl+Shift+w

“+{z}” – Shift+z

“+” – установить checkbox в активное состояние

“-“ – установить checkbox в неактивное состояние

“{TAB}” – перейти к следующему элементу

“+{TAB}” – перейти к предыдущему элементу

“^{TAB}” – перейти к следующей вкладке

“{CTRLDOW}+{TAB}{CTRLUP}” – перейти к прелылущей вкладке

Работа с файлами в AutoIt

За работу с файлами в AutoIt отвечает библиотека “file.au3”, более подробную можно найти в папке с примерами (examples)

Возможно вам когда-нибудь приходилось добавлять много алиасов для сайта в IIS, “добавлять руками?”, настоящий админ на это не пойдет ;).
Следующая программа считывает из файла config.ini имена алиасов для сайта и добавляет их в IIS:

#include
;Buffer array for file lines
;SEE config.ini
Dim $aRecords
;Read from file 'config.ini' to $aRecord array
_FileReadToArray("config.ini",$aRecords)
;Wait 6s
WinWaitActive("Advanced Web Site Identification", "Add...")
;For each line of file
For $x = 1 to $aRecords[0]
	DoSome($aRecords[$x])
Next
; Function for create add IIS alias for site
Func DoSome($val1)
	AutoItSetOption("SendKeyDelay", 10)
	Send('!a{TAB}80{TAB}' &amp; $val1 &amp; '{TAB}{ENTER}');
	Sleep(1000);
 
EndFunc

Запускаем скрипт, открываем свойства сайта и захоим в список алиасов:

Свойства сайта IIS

Свойства сайта IIS

Как только вы нажмете на кнопку “Advanced”, скрипт прочтет содержимое файла config.ini и добавит к сайту указанные там алиасы.

Вот еще один скрипт, но уже на любителя. В компании где я работаю разрабатывается довольно много сайтов с использование CMS DotNetNuke, для этой кэширования сайта используется DNN модуль PageBlaser. Следующий скрипт добавляет нужные для него опции сайта в IIS:

DoSome('.js')
DoSome('.css')
DoSome('.jpeg')
DoSome('.jpg')
DoSome('.png')
DoSome('.gif')
 
; Function for add pageblaster ext.
; $val1 == extention (.js)
Func DoSome($val1)
	AutoItSetOption("SendKeyDelay", 10)
	WinWaitActive("Application Configuration")
	Send('!{d}C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll{TAB 2}' &amp; $val1 &amp; '{TAB 3}-{TAB}{ENTER}')
	Sleep(1000)
EndFunc

Предпологается что версия .NET 2.0.20727 и что вы доберетесь до опций сайта:

IIS pageblaster DNN

Компиляция скриптов

Никому не хочется ставить лишний софт на компьютер, а тем более на сервер. Для того чтобы не ставить AutoIt на все копьютеры где он нужен, можно написать скрипт на своем компьютере (или виртуальной/удаленной машине если вы злосный nix`оид ;)) а затем его откомпилировать. Откомпилировать AutoIt скрипт можно следующими способавми:
1. В SciTE:
AutoIt compile in SciTE2. Через контекстное меню файла

AutoIt compile from context menu3. Из консоли

C:Program FilesAutoIt3Aut2Exeaut2exe.exe /in "script_name"

Для самых ленивых, автоматические генераторы скриптов

Для самыл ленивых существует вариант полностью автоматизированной записи скриптов, но к сожалению качество таких генераторов не очень высокое. Но всеже:

 

  • AutoItMacroGenerator – Записывает в реальном времени действия пользователя в AutoIt код.
  • ScriptWriter – Аналог AutoItMacroGenerator.