Написание сценариев на основе служб терминалов (часть 9)

Опубликовано: 23 Апреля, 2023



  • Написание сценариев на основе служб терминалов (часть 1)
  • Написание сценариев на основе служб терминалов (часть 2)
  • Написание сценариев на основе служб терминалов (часть 3)
  • Написание сценариев на основе служб терминалов (часть 4)
  • Написание сценариев на основе служб терминалов (часть 5)
  • Написание сценариев на основе служб терминалов (часть 6)
  • Написание сценариев на основе служб терминалов (часть 7)
  • Написание сценариев на основе служб терминалов (часть 8)

  • Написание сценариев на основе служб терминалов (часть 11)
  • Написание сценариев на основе служб терминалов (часть 12)
  • Написание сценариев на основе служб терминалов (часть 13)
  • Написание сценариев на основе служб терминалов (часть 14)

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


Подпрограммы


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


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


@эхо выключено
установить _car=D
:Петля
клс
Эхо Какая твоя любимая машина:
Эхо А: Ламборгини
Эхо Б: Феррари
Эхо С: Порше
Эхо.
Эхо Д: Выйти
Эхо.
Установить /P _car=Пожалуйста, введите ваш выбор:
если не "%_car%"=="" установить _car=%_car:~0,1%
REM-эхо %_car%
Если /i "%_car%"=="A" перейти к sub_lambo
Если /i "%_car%"=="B" перейти к sub_ferrari
Если /i "%_car%"=="C" перейти к sub_Porsche
если /I "%_car%"=="D" goto:eof
перейти: цикл
:sub_lambo
эхо Вы выбрали Lamborghini
перейти: eof
:sub_ferrari
эхо Вы выбрали Феррари
перейти: eof
:sub_porsche
эхо Вы выбрали Порше


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


Если вы просмотрите сценарий, то увидите, что я определил четыре отдельные подпрограммы. Подпрограммы: loop, sub_lambo, sub_ferrari и sub_porsche. Вы можете увидеть, где начинается каждая подпрограмма, посмотрев на двоеточие перед именем подпрограммы. В сценарии вы также заметите несколько экземпляров команды goto, которая вызывает различные подпрограммы.


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


Подробнее о меню


Теперь, когда я объяснил, как вызываются подпрограммы, я хочу пройтись по меню построчно и объяснить, как оно работает. Первая строка — это просто команда @echo off. Он не позволяет Windows отображать все команды по мере их выполнения.


Вторая строка скрипта — Set _car=D. Эта команда инициализирует переменную с именем _car значением D. Причина, по которой я это делаю, заключается в том, что ниже сценарий содержит некоторый код, который приводит к завершению сценария, если пользователь вводит D. Сценарий разработан таким образом. Таким образом, если пользователь ничего не введет, а просто нажмет Enter, сценарий будет использовать значение по умолчанию D, которое я назначаю здесь, и поэтому завершится.


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



Рисунок A.
Эта блок-схема иллюстрирует наш пример сценария.


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


Четвертая строка в сценарии или первая строка в подпрограмме Looped — это CLS. Я не могу вспомнить, говорил ли я о команде CLS в этой серии статей раньше или нет, но она просто говорит Windows очистить экран.


Следующие несколько строк скрипта — это просто серия эхо-команд для отображения пунктов меню. Единственное, что немного необычно в этом разделе сценария, это наличие двух строк, в которых сразу после слова Echo следует точка. Эти команды указывают сценариям вставлять пустую строку в текст на экране.


Вы столкнетесь с командой SET /P _car=Пожалуйста, введите свой выбор:. В Windows команда Set /P указывает Windows остановиться и дождаться ввода данных пользователем. Ввод записывается в указанную переменную. В данном случае это переменная _car. Эта команда также отображает текст «Пожалуйста, введите ваш выбор:».


Далее скрипт обрабатывает следующую команду:


Если не


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


Вы заметите, что следующая строка в скрипте:


REM


REM — это команда комментариев Windows. Команды, начинающиеся с REM, фактически не выполняются. Если вы удалите команду REM, вы увидите содержимое переменной _car. Если вы посмотрите на рисунок B, вы увидите, что я добавил эту команду до и после команды для анализа ввода пользователя. Когда сценарий попросил меня сделать выбор, я ввел слово Apple вместо того, чтобы набирать A, B, C или D. Команда синтаксического анализа усекла слово Apple до A, как вы можете видеть на рисунке, который соответствует выбор в пользу Ламборджини.



Рисунок B: Вот как работает функция синтаксического анализа


Вывод


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




  • Написание сценариев на основе служб терминалов (часть 1)
  • Написание сценариев на основе служб терминалов (часть 2)
  • Написание сценариев на основе служб терминалов (часть 3)
  • Написание сценариев на основе служб терминалов (часть 4)
  • Написание сценариев на основе служб терминалов (часть 5)
  • Написание сценариев на основе служб терминалов (часть 6)
  • Написание сценариев на основе служб терминалов (часть 7)
  • Написание сценариев на основе служб терминалов (часть 8)

  • Написание сценариев на основе служб терминалов (часть 11)
  • Написание сценариев на основе служб терминалов (часть 12)
  • Написание сценариев на основе служб терминалов (часть 13)
  • Написание сценариев на основе служб терминалов (часть 14)