Лучший отвечающий
Сценарий на VBS и TELNET.EXE

Вопрос
-
Доброго времени суток, уважаемые коллеги! Нужна ваша помощь.
Появилась у меня необходимость поуправлять сетевыми принтерами через TELNET, но не вручную, а из сценария на VBS. Казалось бы всё элементарно: используй метод Exec объекта WshShell, перехватывай стандартные потоки, и получишь желаемое. Однако типовой для подобной задачи кодSet objWShell = CreateObject("WScript.Shell") Set objExec = objWShell.Exec("telnet.exe /?") Set objOutStream = objExec.StdOut While Not objOutStream.AtEndOfStream strOut = strOut & Trim(objOutStream.ReadLine) & vbNewLine Wend
даёт в качестве значения переменной strOut пустую строку.
В чём бы здесь могло быть дело?4 июля 2013 г. 11:26
Ответы
-
C# + telnet process w/ redirected standard streams quits immediately - ответ Hans Passant
Поэтому все используют - SendKeys,сторонние библиотеки,клиенты(http://consoletelnet.sourceforge.net/,putty) и т.д
- Помечено в качестве ответа DmitriiV 4 июля 2013 г. 12:03
4 июля 2013 г. 11:41Отвечающий -
Я поступал следующим образом: запускал telnet с ключом -f, чтобы направлять вывод telnet в лог-файл:
strLogFile = "c:\scripts\telnet.log" Set oShell = CreateObject("WScript.Shell") oShell.Run "telnet.exe -f " & strLogFile & " " & strComputer WScript.Sleep 5000 On Error Resume Next oShell.AppActivate "Telnet" If Err.Number<>0 Then WScript.Echo "Cannot start Telnet application" WScript.Quit End If On Error Goto 0 Set fso = CreateObject("Scripting.FileSystemObject") Set oLogFile = fso.OpenTextFile(strLogFile, ForReading)
затем получал вывод после каждой команды SendKeys, вызывая функцию
Function fnResponse() const t=500 Dim i Dim strResponse i = 0 Do While (i<=10) And oLogFile.AtEndOfStream i = i + 1 WScript.Sleep t Loop If oLogFile.AtEndOfStream Then fnResponse = "" Exit Function Else strResponse = "" Do Until oLogFile.AtEndOfStream strResponse = strResponse & oLogFile.ReadAll WScript.Sleep t Loop End If fnResponse = strResponse End Function
- Изменено osr_MVP, Moderator 4 июля 2013 г. 12:17 дополнение
- Помечено в качестве ответа DmitriiV 5 июля 2013 г. 2:49
4 июля 2013 г. 12:12Модератор
Все ответы
-
C# + telnet process w/ redirected standard streams quits immediately - ответ Hans Passant
Поэтому все используют - SendKeys,сторонние библиотеки,клиенты(http://consoletelnet.sourceforge.net/,putty) и т.д
- Помечено в качестве ответа DmitriiV 4 июля 2013 г. 12:03
4 июля 2013 г. 11:41Отвечающий -
Благодарю. Понятно.4 июля 2013 г. 12:04
-
Я поступал следующим образом: запускал telnet с ключом -f, чтобы направлять вывод telnet в лог-файл:
strLogFile = "c:\scripts\telnet.log" Set oShell = CreateObject("WScript.Shell") oShell.Run "telnet.exe -f " & strLogFile & " " & strComputer WScript.Sleep 5000 On Error Resume Next oShell.AppActivate "Telnet" If Err.Number<>0 Then WScript.Echo "Cannot start Telnet application" WScript.Quit End If On Error Goto 0 Set fso = CreateObject("Scripting.FileSystemObject") Set oLogFile = fso.OpenTextFile(strLogFile, ForReading)
затем получал вывод после каждой команды SendKeys, вызывая функцию
Function fnResponse() const t=500 Dim i Dim strResponse i = 0 Do While (i<=10) And oLogFile.AtEndOfStream i = i + 1 WScript.Sleep t Loop If oLogFile.AtEndOfStream Then fnResponse = "" Exit Function Else strResponse = "" Do Until oLogFile.AtEndOfStream strResponse = strResponse & oLogFile.ReadAll WScript.Sleep t Loop End If fnResponse = strResponse End Function
- Изменено osr_MVP, Moderator 4 июля 2013 г. 12:17 дополнение
- Помечено в качестве ответа DmitriiV 5 июля 2013 г. 2:49
4 июля 2013 г. 12:12Модератор -
osr_, благодарю за совет. Я пришёл к подобному же решению.5 июля 2013 г. 2:52
-
в первом скрипте добавить для правильной работы
Const ForReading = 1
Const ForWriting = 2
куда-нибудь перед строкой
Set oLogFile = fso.OpenTextFile(strLogFile, ForReading)
а иначе возможна ошибка
Ошибка: Недопустимый вызов или аргумент процедуры
Код: 800A0005
Источник: Ошибка выполнения Microsoft VBScript
возникает она не у всех
Для совместимости на других системах где константы сконфигурированны для запрета записи и чтения от WSH
24 октября 2013 г. 22:22 -
Да, согласен, причем в исходном скрипте эти константы есть. Я просто выдирал куски из готового скрипта, чтобы проиллюстрировать вариант решения.25 октября 2013 г. 6:58Модератор