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

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

  • Написание сценариев на основе служб терминалов (часть 1)
  • Написание сценариев на основе служб терминалов (часть 2)
  • Написание сценариев на основе служб терминалов (часть 3)
  • Написание сценариев на основе служб терминалов (часть 4)
  • Написание сценариев на основе служб терминалов (часть 5)
  • Написание сценариев на основе служб терминалов (часть 6)
  • Написание сценариев на основе служб терминалов (часть 7)
  • Написание сценариев на основе служб терминалов (часть 8)
  • Написание сценариев на основе служб терминалов (часть 9)
  • Написание сценариев на основе служб терминалов (часть 11)
  • В предыдущей статье этой серии я сделал шаг назад и завершил сценарий, который изначально начал в части 10. Теперь, когда вы узнали, как принимать пользовательский ввод, я готов вернуться к сценарию, который начал создавать в части 10. 11.

    Переключение терминальных серверов

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

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

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

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

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

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




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

    Последняя строка подпрограммы в настоящее время указывает сценарию перейти к концу файла и затем завершить работу. Мы можем изменить это, изменив слово EOF на LOOP. LOOP — это имя подпрограммы, используемой для главного меню скрипта. Это означает, что когда Windows достигает конца подпрограммы, она больше не завершает выполнение сценария, а скорее возвращается в меню сценария.

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




    Имейте в виду, что подпрограмма переключения серверов оставляет многое на волю случая. Это полностью зависит от того, правильно ли администратор напишет имя сервера и введет ли имя действительного терминального сервера. К сожалению, выполнение любой серьезной проверки ошибок требует довольно сложного программирования, которое выходит далеко за рамки этой серии статей. Если вы хотите выполнить некоторую проверку ошибок, но хотите выбрать легкий путь, вы всегда можете включить команду PING в подпрограмму. У нас уже есть имя сервера, назначенное переменной _SRV, так что вы можете проверить связь с сервером, чтобы убедиться, что указанный сервер по крайней мере существует, введя следующую команду:

    Информация о сеансе

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

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



    Поскольку первая команда меню терминала, которую я хочу сделать, связана с информацией о сеансе, давайте создадим копию подпрограммы и назовем ее sub_session. Далее мы избавимся от команды echo и заменим ее командой QUERY SESSION. Вы можете увидеть, как выглядит завершенная подпрограмма ниже:



    Обратите внимание, что я изменил последнюю команду в подпрограмме на goto:loop, чтобы сценарий не завершался после выполнения команды.

    Команда Query Session использует два переключателя. Первый — это переключатель /server, который используется для направления команды на сервер, указанный администратором. Другой переключатель — это переключатель /Counter. Это необязательный переключатель, который дает нам хорошее количество сеансов под списком сеансов.

    Вывод

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

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