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

Автоматизация задач через пакетные файлы (.bat) и Windows-скрипты (.wsf) — это то, что экономит часы рутины системным и сетевым администраторам. С их помощью можно массово устанавливать и удалять ПО, собирать инвентарь по ОС и приложениям, а также выполнять любые повторяющиеся операции. Но некоторые задачи требуют интерактивного ввода и нескольких шагов аутентификации — типичный пример — Telnet.
Многие администраторы подключаются через Telnet к коммутаторам, контроллерам доступа и другим устройствам, чтобы посмотреть статус, настроить порты или перезагрузить устройство. Было бы удобно автоматизировать такие сессии так же, как обычные пакетные задачи. VBScript предлагает простой и универсальный инструмент: объект WScript.Shell и метод SendKeys, который позволяет программно посылать клавиши в окно командной строки, имитируя ввод оператора.
Что вы сможете сделать после прочтения
- Открывать cmd и подключаться по telnet автоматически.
- Отправлять последовательные ответы меню (Enter, числа, команды).
- Настраивать паузы (Sleep) чтобы дождаться ответов.
- Организовать повторные подключения к списку устройств.
- Понять ограничения и альтернативы для безопасной автоматизации.
Важно: этот подход имитирует ввод с клавиатуры и уязвим к окнам в фокусе. Применяйте в контролируемой среде и по возможности на управляющем сервере без GUI-вмешательства.
Основная идея и терминология
- WshShell — объект оболочки Windows, через который мы запускаем программы и отправляем клавиши.
- SendKeys — метод, который посылает символьный ввод в текущее активное окно.
- WScript.Sleep — пауза в миллисекундах для ожидания отклика.
Кратко: скрипт открывает cmd, запускает telnet, затем пошагово посылает клавиши и ждёт ответов.
Исходный минимальный скрипт (оригинал)
Ниже сохранён исходный пример в исходном оформлении. Этот блок точно воспроизводит последовательность шагов, показанных в оригинальном руководстве.
Option ExplicitOn Error Resume NextDim WshShellset WshShell=CreateObject("WScript.Shell")WshShell.run "cmd.exe"WScript.Sleep 1000'Send commands to the window as needed - IP and commands need to be customized'Step 1 - Telnet to remote IP'WshShell.SendKeys "telnet xx.xx.xx.73 9999"WshShell.SendKeys ("{Enter}")WScript.Sleep 1000'Step 2 - Issue Commands with pauses'WshShell.SendKeys ("{Enter}")WScript.Sleep 1000WshShell.SendKeys "5"WshShell.SendKeys ("{Enter}")WScript.Sleep 1000'Step 3 - Exit Command WindowWshShell.SendKeys "exit"WshShell.SendKeys ("{Enter}")WScript.Quit Этот код откроет окно командной строки, подключится по указанному 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 для данных), убедитесь, что автоматизация не выводит персональные сведения в логи.
Отладка и устранение проблем
- Проверьте, что telnet установлен в Windows: cmd -> telnet. Если команда не найдена — включите компонент Telnet Client через Панель управления.
- Убедитесь, что нужный порт открыт и доступен из вашей сети.
- Добавьте дополнительные WScript.Echo в скрипт для временной отладки.
- Тестируйте команды вручную перед автоматизацией. Сначала подключитесь и вручную выполните шаги с тем же временем ожидания.
- Если окно теряет фокус, запускайте скрипт на выделенной машине без активных пользователей или используйте обходные пути (например, удалённый агент, который сам выполняет команды).
Чек-лист перед внедрением
- Тестовая среда воспроизводит продакшн-устройства.
- Все IP и порты указаны в защищённом хранилище (или доступны только с управляющего хоста).
- Заданы адекватные задержки и логирование.
- Есть резервный план: ручной доступ и инструкции по откату.
- Уведомлены заинтересованные стороны о времени выполнения скрипта.
Пример playbook: перезагрузка пяти устройств
- Подготовить файл devices.txt с записями вида IP:PORT.
- Положить скрипт Autotelnet.wsf на управляющем сервере.
- Запустить в рабочее окно (или планировщиком задач в тихом режиме).
- Следить за выводом и логами.
- При ошибке — проверить сетевую доступность и повторить вручную.
Критерии приёмки
- Скрипт корректно подключается к каждому устройству и выполняет требуемую последовательность команд без вмешательства.
- Время выполнения укладывается в ожидаемые окна обслуживания.
- Нет утечек чувствительных данных в логах.
Краткая галерея крайних случаев
- Устройство не отвечает на Telnet — скрипт ожидает и затем пытается закрыть окно.
- Меню устройства изменилось — требуется обновить последовательность SendKeys.
- Окно потеряло фокус — скрипт отправляет ввод в неправильное окно; требуется запуск в изолированной среде.
1‑строчная справка (глоссарий)
- SendKeys — метод VBScript для имитации нажатий клавиш.
- WScript.Sleep — пауза выполнения в миллисекундах.
- WshShell.Run — метод для запуска процессов/окон.
Заключение
Автоматизация Telnet с помощью VBScript — быстрый и доступный инструмент, когда вам нужно имитировать поведение человека в интерактивной оболочке. Подходит для простых и повторяющихся меню, где требуется посылать фиксированные ответы. Для более сложной логики и парсинга вывода рассмотрите инструменты с поддержкой «expect» или библиотеки для SSH. Всегда учитывайте риски безопасности при использовании Telnet в рабочей сети.
Поделитесь в комментариях, какие задачи вы автоматизировали у себя — интересно узнать реальные сценарии и возможные нестандартные решения.
Image Credit: Shutterstock
Похожие материалы
Стрелки не работают в Excel — быстрое решение
Шифрование USB‑накопителя с VeraCrypt
PowerShell: история команд — просмотр и сохранение
Nandroid — полная резервная копия Android
Ошибка 0x800f0806 в Windows 11 22H2