1 (изменено: ypppu, 2016-04-19 18:58:16)

Тема: VBS: скрипт с telnet периодически перестает работать

У меня 4g модем. Прога автоматически запускает бат файл. Который ведет на vbs файл, который ребутит модем.
Суть в том что этот vbs работает нормально, а потом ни с сего выдает другое окно, где вместо указанной команды telnet 192.168.8.1 пытается выполнить просто 192.168.8.1. Если в скрипте че нить переписать сохранить и переписать обратно скрипт снова работает.

И вопрос. Как так получается что скрипт ломается? И выполняется не та команда которая указана ни с того ни с сего. Скрины прилагаются.

VBSSCRIPT
set my = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder("C:\Andrey\Avitool\avitool")
my.run("cmd")
WScript.Sleep 100
my.SendKeys("telnet 192.168.8.1~")
WScript.Sleep 100
my.SendKeys("root~")
WScript.Sleep 100
my.SendKeys("zte9x15~")
WScript.Sleep 100
my.SendKeys("reboot~")
WScript.Sleep 3000
my.SendKeys("z~")
WScript.Sleep 1000
my.SendKeys("exit")
WScript.Sleep 100
my.SendKeys("^M")

А вот батник если надо

cd C:\Andrey\Avitool\avitool
TIMEOUT /T 25 /NOBREAK 
start changeip2.vbs
exit

НОРМ https://pp.vk.me/c633720/v633720135/2b2 … xN2ISg.jpg
НЕНОРМ https://pp.vk.me/c633720/v633720135/2b2 … rkOqdA.jpg

2

Re: VBS: скрипт с telnet периодически перестает работать

Возможно окно не успевает активизироваться и буквы «telnet» в него не попадают.

set ws = WScript.CreateObject("WScript.Shell")
WinTitle = "Уникальный заголовок окна"
ws.run "cmd /k title " & WinTitle
while not ws.AppActivate(WinTitle): WScript.Sleep 1: wend
ws.SendKeys "telnet 192.168.8.1~root~zte9x15~reboot~"
' ...

3

Re: VBS: скрипт с telnet периодически перестает работать

А с каких пор SendKeys стал взаимодействовать с консольными окнами? Тут StdIn.WriteLine нужен.

4

Re: VBS: скрипт с telnet периодически перестает работать

Flasher пишет:

А с каких пор SendKeys стал взаимодействовать с консольными окнами?

А с каких пор перестал? Было заявлено лишь о невзаимодействии с DOS.

Flasher пишет:

Тут StdIn.WriteLine нужен.

Например, в консольном приложении может быть жёстко задан ввод данных с устройства CON и никакое перенаправление StdIn не поможет.

5 (изменено: Flasher, 2016-04-21 17:59:50)

Re: VBS: скрипт с telnet периодически перестает работать

wisgest пишет:

А с каких пор перестал? Было заявлено лишь о невзаимодействии с DOS.

Тогда AppActivate тут не поможет. Проблема в активации подстрочного курсора. Поэтому и Sleep-ы используются.

wisgest пишет:

Например, в консольном приложении может быть жёстко задан ввод данных с устройства CON и никакое перенаправление StdIn не поможет.

Мне известны такие случаи. Разве у telnet есть такая проблема?

6

Re: VBS: скрипт с telnet периодически перестает работать

Flasher пишет:

Тогда AppActivate тут не поможет.

Не понял, откуда такой вывод.

Flasher пишет:

Проблема в активации подстрочного курсора.

Скорее всего, нажатия клавиш будут запомнены в буфере клавиатуры и извлечены из него по мере готовности.

Flasher пишет:

Разве у telnet есть такая проблема?

echo help|telnet

7

Re: VBS: скрипт с telnet периодически перестает работать

wisgest пишет:

Не понял, откуда такой вывод.

Он активирует окно по заголовку, сам клик в рабочее поле не производится.

wisgest пишет:

Скорее всего, нажатия клавиш будут запомнены в буфере клавиатуры и извлечены из него по мере готовности.

Если бы. В случае с SendKeys такого не происходит.

echo help|telnet

Мне не поможет, у меня выпилен.

8

Re: VBS: скрипт с telnet периодически перестает работать

Flasher пишет:

Он активирует окно по заголовку, сам клик в рабочее поле не производится.

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

Flasher пишет:

В случае с SendKeys такого не происходит.

Похоже, что что-то такое происходит:

/* 2>nul
CScript.exe /e:JScript "%~f0"
set /p str=
echo %str%
pause
exit /b
*/
(new ActiveXObject("WScript.Shell")).SendKeys("Hello, world!~");
WScript.Sleep(3000);
Flasher пишет:

Мне не поможет, у меня выпилен.

C telnet.exe все перенаправления, за исключением

telnet.exe<con

работают как

telnet.exe<nul

9

Re: VBS: скрипт с telnet периодически перестает работать

wisgest пишет:

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

Пока не появится курсор, активация по заголовку к положительному эффекту не приводит. Более того,  AppActivate в случае .run не требуется, за активацию отвечает второй параметр со значением 1 или 3.

wisgest пишет:

Похоже, что что-то такое происходит:

Эмулировать клавиши из батника  - всё-таки не то же самое, к тому моменту строка уже получает фокус.

wisgest пишет:

работают как

Понятно.

10

Re: VBS: скрипт с telnet периодически перестает работать

Flasher пишет:

Более того,  AppActivate в случае .run не требуется, за активацию отвечает второй параметр со значением 1 или 3.

Требуется, чтобы проверить существование окна (в цикле — дождаться его появления).

11

Re: VBS: скрипт с telnet периодически перестает работать

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

12

Re: VBS: скрипт с telnet периодически перестает работать

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