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

Простейший пускач автоматизации на дереве пускачей - это пускач COMMAND.

Единственный кусок информации, который содержится в пускаче COMMAND - это текст команды, который будет вставлен во встроенный терминал, когда пускач COMMAND выполняется на дереве пускачей.

Чтобы выполнить пускач на дереве пускачей пользователь должен сделать двойной клик на таком пускаче, и тогда программа будет проверять, в какой терминал нужно выполнить этот пускач. Программа будет искать в окне SELECTOR, чтобы посмотреть, какое окно встроенного терминала активно в данный момент.

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

Для того, чтобы эта операция прошла успешно, нужно сначала проверить несколько вещей.

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

Еще одна вещь, которую нужно проверить перед выполнением автоматизации - это то, что активный терминал действительно куда-то подключен. Имеется два способа, чтобы это проверить:

Еще одна вещь, которую нужно проверить перед тем, как пытаться выполнять любую автоматизацию в окно встроенного терминала - это то, что в настоящий момент активный терминал не занят выполнением какого-либо другого типа автоматизации, который может требовать некоторого времени на его выполнение, как, например, SCRIPT или PLUGIN, поскольку они могут выполняться очень долгое время, и пока они выполняются в этом конкретном окне терминала, это окно остается занятым и оно не может принять запуск другой автоматизации с дерева пускачей.

Нельзя запустить COMMAND, SCRIPT или PLUGIN в окно встроенного терминала, если это окно занято, выполняя SCRIPT или PLUGIN, до тех пор, пока запущенный SCRIPT или PLUGIN в этом окне не завершится. Нужно ждать, до тех пор, пока выполняющаяся в настоящее время автоматизация завершится.

Или, если вы очень хотите запустить новый пускач автоматизации в этот терминал, вы можете убить SCRIPT или PLUGIN, который сейчас запущен в этом окне терминала.

Имеется кнопка "Kill" (убить) в левом нижнем углу окна терминала, и эта кнопка появляется только тогда, когда в этом окне терминала выполняется SCRIPT или PLUGIN.

Эта кнопка "Kill" видна только тогда, когда в терминале запущен SCRIPT или PLUGIN, так что, когда SCRIPT или PLUGIN завершен, этой кнопки там больше нет.

Вы можете определить, запущен ли в терминале SCRIPT или PLUGIN, если Вы посмотрите в левый нижний угол окна терминала, и, если Вы увидите кнопку "Kill" в левом нижнем углу, тогда Вы знаете, что в этом терминале запущен SCRIPT или PLUGIN.

Таким образом, если все проверки прошли успешно, это означает что:

  1. Окно встроенного терминала выбрано в окне SELECTORа в качестве активного терминала и отображается с красной рамкой.
  2. Этот терминал не минимизирован и находится в текущем рабочем пространстве.
  3. Этот терминал подключен к некоторому оборудованию и способен принимать печатаемые команды в ручном режиме.
  4. Этот терминал не занят в настоящее время выполнением SCRIPT или PLUGIN.

Если все эти проверки успешно прошли, то пользователь может просто сделать двойной клик на любом пускаче команд на дереве пускачей, и тогда этот пускач команд будет выполнен, что означает, что текст, который содержится в этом пускаче команд, будет вставлен в активное окно терминала, а затем символ окончания строки, например, возврат каретки (чтобы имитировать нажатие клавиши "Enter"), будет отправлен в окно терминала, чтобы инициировать выполнение вставленной команды.

В этот момент произойдет выполнение команды в оборудовании, и результаты выполнения этой команды будут показаны в окне терминала.

Пускач команд выполняется очень быстро на стороне терминала, поскольку он включает в себя только отправку текста команды на удаленное оборудование. Выполнение самой команды в удаленном оборудовании и распечатка результатов выполнения этой команды могут занять некоторое время, и обычно пользователю приходится ждать до тех пор, пока оборудование отобразит на экране подсказку, которая означает, что оборудование готово принимать следующую команду. Хотя терминал готов выполнять следующий пускач COMMAND, SCRIPT или PLUGIN практически мгновенно после запуска предыдущего пускача команд, обычно пользователь должен ждать, пока оборудование будет готово принимать следующую команду перед тем, как запускать следующий пускач COMMAND, SCRIPT или PLUGIN.

Поскольку пускачи SCRIPT или PLUGIN обычно посылают больше, чем одну команду в оборудование, то они сами следят за тем, чтобы следующая команда посылалась в оборудование только тогда, когда оборудование готово принимать следующую команду.

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

Обычно команды можно посылать очень быстро одну за другой, выполняя один за другим пускачи команд. Но при этом пользователь должен следить за тем, чтобы следующая команда посылалась в оборудование только тогда, когда оборудование готово принимать следующую команду.

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

Такой текст может содержать в себе много последовательных отдельных команд или представлять собой одну длинную команду, которая содержит переносы на следующие строки. Интерпретация текста зависит от особенностей (специфики) оборудования, на которое он посылается. Но при этом важно помнить, что пускач COMMAND не только посылает текст, который в нем хранится, но и посылает символ завершения строки после этого текста для того, чтобы инициировать выполнение команды. При выполнении пускача COMMAND в окно встроенного терминала символ завершения строки посылается всегда, а при выполнении пускача COMMAND в окно внешнего процесса пользователь может выбирать посылать или не посылать символ завершения строки и, если посылать, то какой.

Когда пользователь выполняет отправку большого текста на удаленное оборудование, то такой текст помещается сначала в буфер размером один мегабайт внутри встроенного терминала PROXY32. Затем текст из этого буфера начинает подаваться в удаленное оборудование небольшими порциями с такой скорость, с которой это оборудование может его принимать. До тех пор, пока этот буфер полностью не освободится, пользователь может инициировать вставку текста, размер которого не превышает осводившегося места в этом буфере. Когда вставка предыдущего текста уже завершилось и свободное место в буфере составляет 1MB, пользователь опять может инициировать вставку текста размером до 1MB.

Пускач COMMAND просто отправляет цепочку байтов на удаленное оборудование, а потом завершает эту цепочку байтов символом завершения строки (возврат каретки), чтобы инициировать выполнение команды на удаленном оборудовании. Но кроме этого, имеется более сложный механизм, который называется "параметры подстановки" и который пользователь может использовать как часть текста команды.

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

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

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

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

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

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

При использовании такого пускача COMMAND пользователь может вводить разные имена директорий при каждом запуске этого пускача. Можно называть такой пускач параметризованным пускачем команд, чтобы подчеркнуть тот факт, что он может быть адаптирован под конкретную задачу непосредственно при его выполнении.

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

Такое сохранение удобно для тех параметров, значения которых изменяются редко (которые не изменяются пользователем при каждом выполнении пускача). Такие параметры можно включать при необходимости в текст многих других пускачей, а в тех случаях, когда их значения должны быть изменены, такое изменение можно сделать из одного централизованного места в программе (диалог редактирования параметров). Это избавляет нас от необходимости редактировать большое число пускачей, в которых эти параметры используются.

Имеется специальный тип параметров, который можно подставлять в текст команды вместо паролей. Значения этих параметров защищены от просмотра как при вводе этих значений в диалоге, так и при сохранении этих значений в файл.

Другая вещь, которая может быть использована внутри команды - это возможность вставлять специальные символы в текст команды.

Например, мы хотим послать текст команды, но мы также хотим послать Ctrl-C чтобы прервать выполнение предыдущей команды.

В зависимости от оборудования может потребоваться послать в него некоторую комбинацию непечатных ASCII символов, чтобы выполнить некоторую задачу.

Например, для некоторых типов LOGINа пользователь всегда должен посылать Ctrl-C в конце, чтобы получить подсказку, указывающую на готовность оборудования принимать команды. Или Ctrl-C может быть необходима, чтобы выполнить LOGOUT. Комбинация Ctrl-[ используется, чтобы перевести TELNET клиент из прозрачного режима в командный режим.

Непечатные ASCII символы могут быть вставлены с помощью специальной кнопки в редакторе пускача команд. Эта кнопка позволяет вставлять специальные символы в текст команды, при этом эти символы становятся частью текста команды и посылаются на удаленное оборудование, когда такая команда выполняется.

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

Таким образом, пускач команд может выполняться не только в окно встроенного терминала, но и в окно любого внешнего процесса, который не обращается к клавиатуре напрямую, а считывает нажатия клавиш из системного буфера клавиатуры. Пускач команд успешно выполняется в 99% всех внешних процессов, но он не работает в окнах, создаваемых с помощью системы виртуальных desktop-ов (X-Window и т.д.).

Пускач команд можно выполнять в окна таких внешних процессов как:

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

Например, предположим, что пользователь открывает web страницу, которая запрашивает имя пользователя и пароль для доступа к защищенной информации. Такая страница будет содержать текстовое поле для ввода имени пользователя, текстовое поле для ввода пароля и кнопку "LOGIN", которая посылает содержимое этих двух текстовых полей для проверки на сервер. Для того, чтобы автоматизировать прохождение такой страницы с помощью пускача команд пользователь должен выяснить возможно ли пройти такую страницу только с использованием клавиатуры и без использования мышки (поскольку пускач команд имитирует только нажатия клавиш клавиатуры). Типичная страница будет устанавливать текстовый курсор в поле ввода имени пользователя при открытии страницы. После этого при нажатии клавиши табуляции курсор будет перемещаться в текстовое поле для ввода пароля, а затем при нажатии клавиши "Enter" будет автоматически нажиматься кнопка "LOGIN", которая посылает содержимое этих двух текстовых полей для проверки на сервер. Используя эту информацию, пользователь должен создать пускач команд со следующим текстом:

Примечание: 1. Табуляция - это непечатный символ, который вставляется в текст команды с помощью специальной кнопки в редакторе пускача команд. 2. Клавиша "Enter" имитируется символами новой строки или парой символов возврат каретки/новая строка в зависимости от программы внешнего процесса. При выполнении пускача команд можно выбирать, чем будет завершаться текст команды при отправке. Имеется три варианта:

Выбор варианта завершения текста команды выбирается с помощью кнопки --- полоски меню главного окна. При создании пускача команд можно не вводить в него непечатные символы, которые имитируют завершающее нажатие клавиши "Enter", если выбрать режим, при котором эти символы автоматически посылаются после отправки текста команды.

При создании такого пускача пользователь должен:

Для выполнения такого пускача пользователь должен сделать следующее:

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