Как использовать строковую переменную в качестве команды telnet в VBScript? - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь запустить скрипт Powershell, который вызовет пакетный скрипт, который запустит сеанс telnet и запустит следующую команду:

mediaGet("gei",1)

Благодаря этому вопросу stackoverflow Возможно ли этоиспользовать пакетный файл для установления сеанса telnet, отправить команду и записать вывод в файл? Я написал два сценария:

telnet.bat

start telnet.exe 162.100.10.10
cscript telnet.vbs

telnet.vbs

set OBJECT=WScript.CreateObject("WScript.Shell")
Dim cmd
cmd = "mediaGet("gei",1)
WScript.sleep 50 
OBJECT.SendKeys cmd
WScript.sleep 50 
OBJECT.SendKeys "{ENTER}" 
WScript.sleep 50 
OBJECT.SendKeys "exit{ENTER}" 
WScript.sleep 5000
OBJECT.SendKeys " "

Однако, когда я запускаю сценарии, сценарий vbs не может прочитать строку переменной cmd.Поэтому я изменил его следующим образом:

cmd = "mediaGet" & chr(40) & chr(34) & "gei" & ",1" & chr(41)

Но, тем не менее, он выводит его на терминал telnet следующим образом:

mediaGet"gei",1

Как сделать так, чтобы он читал скобки в строковой переменной?Если сценарии в итоге работают, кто-нибудь знает, как сохранить выходные данные сценария vbs в файл журнала?

1 Ответ

2 голосов
/ 15 мая 2019

Я понятия не имею, что такое mediaget или что он делает (на самом деле я никогда о нем не слышал), поэтому я не буду это комментировать.

Однако запуск внешних команд через PowerShell очень распространен и хорошо документирован. Смотрите эти:

PowerShell: запуск исполняемых файлов

Выполнение внешних команд в PowerShell выполнено правильно

Все это, как говорится ...

Если вы используете консольный сервер powershell.exe, это одно, а все, что вы делаете, это вызываете элементы VBScript и cmd.exe. Так как это так, то почему бы просто не использовать cmd.exe?

Тем не менее, PowerShell может делать это напрямую, поэтому зачем делать дополнительные шаги к .bat и .vbs?

Пример: грубый и непроверенный, потому что мне не нужно загружать и тестировать медиагеет

Start-Process -FilePath 'telnet.exe' -ArgumentList '162.100.10.10'
[system.reflection.assembly]::loadwithpartialname("System.Windows.Forms")
$SendKeys = [System.Windows.Forms.SendKeys]
$sendkeys::SendWait('mediaGet gei,1')
Start-Sleep -Seconds .5
$sendkeys::SendWait("{ENTER}")
Start-Sleep -Seconds .5
$sendkeys::SendWait("exit{ENTER}")

Вы даже можете заменить Telnet своим собственным кодом, используя пространство имен .Net.

New-Object System.Net.Sockets.TcpClient

Называя это так ...

New-Object System.Net.Sockets.TcpClient ('162.100.10.10', 80)

Вы можете использовать это, чтобы написать свой собственный модуль или использовать его с MS powershellgallery.com .

Быстрый поиск на YouTube показывает, что mediaget - это инструмент для загрузки через Интернет.

Если все, что вы делаете, это заходите на сайт / ftp-сайт, чтобы загрузить файл, вы можете сделать это прямо в PowerShell. Смотрите это:

3 способа загрузки файлов с помощью PowerShell

...