Гид по технологиям

Автоматизация Telnet с VBScript

5 min read Скрипты Обновлено 30 Nov 2025
Автоматизация Telnet с VBScript
Автоматизация Telnet с VBScript

Иллюстрация автоматизации командной строки Windows для Telnet

Автоматизация задач через пакетные файлы (.bat) и Windows-скрипты (.wsf) — это то, что экономит часы рутины системным и сетевым администраторам. С их помощью можно массово устанавливать и удалять ПО, собирать инвентарь по ОС и приложениям, а также выполнять любые повторяющиеся операции. Но некоторые задачи требуют интерактивного ввода и нескольких шагов аутентификации — типичный пример — Telnet.

Многие администраторы подключаются через Telnet к коммутаторам, контроллерам доступа и другим устройствам, чтобы посмотреть статус, настроить порты или перезагрузить устройство. Было бы удобно автоматизировать такие сессии так же, как обычные пакетные задачи. VBScript предлагает простой и универсальный инструмент: объект WScript.Shell и метод SendKeys, который позволяет программно посылать клавиши в окно командной строки, имитируя ввод оператора.

Что вы сможете сделать после прочтения

  • Открывать cmd и подключаться по telnet автоматически.
  • Отправлять последовательные ответы меню (Enter, числа, команды).
  • Настраивать паузы (Sleep) чтобы дождаться ответов.
  • Организовать повторные подключения к списку устройств.
  • Понять ограничения и альтернативы для безопасной автоматизации.

Важно: этот подход имитирует ввод с клавиатуры и уязвим к окнам в фокусе. Применяйте в контролируемой среде и по возможности на управляющем сервере без GUI-вмешательства.

Основная идея и терминология

  • WshShell — объект оболочки Windows, через который мы запускаем программы и отправляем клавиши.
  • SendKeys — метод, который посылает символьный ввод в текущее активное окно.
  • WScript.Sleep — пауза в миллисекундах для ожидания отклика.

Кратко: скрипт открывает cmd, запускает telnet, затем пошагово посылает клавиши и ждёт ответов.

Исходный минимальный скрипт (оригинал)

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

Этот код откроет окно командной строки, подключится по указанному IP и порту, затем выполнит короткую последовательность команд с паузами. Замените xx.xx.xx.73 и порт на свои значения и подберите задержки (Sleep) в миллисекундах, чтобы они соответствовали задержкам оборудования.

Развёрнутый пример: подключение к списку устройств

Если устройств несколько, удобно хранить их в текстовом файле и по очереди обрабатывать. Ниже — пример, который читает список IP:порт из файла devices.txt и выполняет ту же последовательность команд для каждого устройства.

' Простой VBScript для последовательного подключения к списку устройств через CMD + Telnet
Option Explicit
Dim fso, file, line, WshShell
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")

' Путь к файлу со списком устройств: каждая строка в формате IP:PORT
Const devicesFile = "devices.txt"

If Not fso.FileExists(devicesFile) Then
  WScript.Echo "devices.txt не найден"
  WScript.Quit
End If

Set file = fso.OpenTextFile(devicesFile, 1)

Do While Not file.AtEndOfStream
  line = Trim(file.ReadLine)
  If line <> "" Then
    ' Открываем новое окно cmd для каждого устройства, чтобы не терять контекст
    WshShell.Run "cmd.exe /k", 1, False
    WScript.Sleep 500
    ' Отправляем команду telnet с адресом
    WshShell.SendKeys "telnet " & line
    WshShell.SendKeys "{Enter}"
    ' Ждём установления соединения (подберите время под ваше устройство)
    WScript.Sleep 1500
    ' Пример навигации по меню: Enter, затем цифра 5 и Enter
    WshShell.SendKeys "{Enter}"
    WScript.Sleep 1000
    WshShell.SendKeys "5"
    WshShell.SendKeys "{Enter}"
    WScript.Sleep 1000
    ' Выход из telnet и закрытие окна
    WshShell.SendKeys "exit"
    WshShell.SendKeys "{Enter}"
    ' Небольшая пауза перед следующим устройством
    WScript.Sleep 500
  End If
Loop

file.Close
WScript.Quit

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

Практические советы по настройке задержек

  • Начинайте с больших значений Sleep (2000–5000 мс) при первом тестировании.
  • Наблюдайте за реальным временем отклика устройства и уменьшайте задержки по мере уверенности.
  • Для критичных операций используйте более длительные паузы и проверку результата вручную.

Когда этот метод не подойдёт

  • Если взаимодействие требует точного чтения вывода и логического разбора (SendKeys не умеет читать ответ).
  • Если окно командной строки может потерять фокус (пользователь или другое приложение перехватит ввод).
  • Для автоматизации на сервере без GUI лучше использовать инструменты без эмуляции клавиатуры.

Альтернативные подходы

  • Использовать Tst10.exe или Tcl/Expect на платформе Cygwin для управления интерактивными сессиями. Они умеют парсить вывод и ждать конкретных строк.
  • Для устройств, поддерживающих SSH — применять ключи SSH и утилиты вроде plink/ssh для неблокирующей аутентификации.
  • Использовать специализированные библиотеки на Python (pexpect) или Go, которые управляют псевдотерминалом и разбирают ответы.

Безопасность и соответствие политике

  • Telnet передаёт данные в открытом виде. Не используйте Telnet в продуктивных сетях без туннелирования через VPN или аналогичные защищённые каналы.
  • Никогда не храните пароли в открытом виде в скриптах. Если устройство требует ввода пароля, изучите возможность использования ключей/SSH или защищённых прокси.
  • Для организаций с требованиями соответствия (например, GDPR для данных), убедитесь, что автоматизация не выводит персональные сведения в логи.

Отладка и устранение проблем

  1. Проверьте, что telnet установлен в Windows: cmd -> telnet. Если команда не найдена — включите компонент Telnet Client через Панель управления.
  2. Убедитесь, что нужный порт открыт и доступен из вашей сети.
  3. Добавьте дополнительные WScript.Echo в скрипт для временной отладки.
  4. Тестируйте команды вручную перед автоматизацией. Сначала подключитесь и вручную выполните шаги с тем же временем ожидания.
  5. Если окно теряет фокус, запускайте скрипт на выделенной машине без активных пользователей или используйте обходные пути (например, удалённый агент, который сам выполняет команды).

Чек-лист перед внедрением

  • Тестовая среда воспроизводит продакшн-устройства.
  • Все IP и порты указаны в защищённом хранилище (или доступны только с управляющего хоста).
  • Заданы адекватные задержки и логирование.
  • Есть резервный план: ручной доступ и инструкции по откату.
  • Уведомлены заинтересованные стороны о времени выполнения скрипта.

Пример playbook: перезагрузка пяти устройств

  1. Подготовить файл devices.txt с записями вида IP:PORT.
  2. Положить скрипт Autotelnet.wsf на управляющем сервере.
  3. Запустить в рабочее окно (или планировщиком задач в тихом режиме).
  4. Следить за выводом и логами.
  5. При ошибке — проверить сетевую доступность и повторить вручную.

Критерии приёмки

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

Краткая галерея крайних случаев

  • Устройство не отвечает на Telnet — скрипт ожидает и затем пытается закрыть окно.
  • Меню устройства изменилось — требуется обновить последовательность SendKeys.
  • Окно потеряло фокус — скрипт отправляет ввод в неправильное окно; требуется запуск в изолированной среде.

1‑строчная справка (глоссарий)

  • SendKeys — метод VBScript для имитации нажатий клавиш.
  • WScript.Sleep — пауза выполнения в миллисекундах.
  • WshShell.Run — метод для запуска процессов/окон.

Заключение

Автоматизация Telnet с помощью VBScript — быстрый и доступный инструмент, когда вам нужно имитировать поведение человека в интерактивной оболочке. Подходит для простых и повторяющихся меню, где требуется посылать фиксированные ответы. Для более сложной логики и парсинга вывода рассмотрите инструменты с поддержкой «expect» или библиотеки для SSH. Всегда учитывайте риски безопасности при использовании Telnet в рабочей сети.

Поделитесь в комментариях, какие задачи вы автоматизировали у себя — интересно узнать реальные сценарии и возможные нестандартные решения.

Image Credit: Shutterstock

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Стрелки не работают в Excel — быстрое решение
Excel

Стрелки не работают в Excel — быстрое решение

Шифрование USB‑накопителя с VeraCrypt
Безопасность

Шифрование USB‑накопителя с VeraCrypt

PowerShell: история команд — просмотр и сохранение
PowerShell

PowerShell: история команд — просмотр и сохранение

Nandroid — полная резервная копия Android
Android.

Nandroid — полная резервная копия Android

Ошибка 0x800f0806 в Windows 11 22H2
Windows 11

Ошибка 0x800f0806 в Windows 11 22H2

Извлечь ссылки с веб‑страницы PowerShell
Automation

Извлечь ссылки с веб‑страницы PowerShell