Пакетный файл, необходимо сохранить вывод в текстовый файл для команды telnet в Windows

Я пытаюсь подключиться к порту через telnet и хочу сохранить вывод в текстовый файл. Я посмотрел и получил два решения, но ни одно из них не работает для меня через командную строку.

телнет 127.0.0.1 7000 -f вывод.txt

телнет 127.0.0.1 7000 >> вывод.txt

Кроме того, проверил эту ссылку для stdout и stderr с 1> и 2> соответственно. Также попытался перенаправить 2 (stderr) на 1 (stdout) через 2>&1, как указано в этой ссылке.

Файл не имеет журналов после запуска следующего кода в пакетном файле. Но он сохраняет журналы, если он может подключиться к порту через telnet. Но мое требование состоит в том, чтобы получить журналы из cmd, если telnet не может подключиться следующим образом:

Подключение к 127.0.0.1... Не удалось открыть соединение с хостом через порт 7002: Ошибка подключения

for port in 7000 7001 7002 
 do
  start cmd.exe /k "telnet 127.0.0.1  $port -f C:\Users\rohit.bagjani\Desktop\result\telnetresult.txt"
done

person Rohit Bagjani    schedule 29.05.2017    source источник
comment
Вы не можете поймать встроенный вывод клиента telnet таким образом. MS Telnet не поддерживает стандартный ввод/вывод. Лучше подумайте о стороннем telnet-клиенте или используйте сокеты с powershell/c#.   -  person npocmaka    schedule 29.05.2017
comment
часть for port, которую вы показываете в коде, никогда не будет работать в Windows, это команды Unix/Linux. Кроме того, -f будет регистрировать ошибки telnet на стороне клиента только в telnet... тем не менее, вы хотите запустить это исключительно для тестирования порта?   -  person Gerhard    schedule 30.05.2017
comment
спасибо @npocmaka за ваш комментарий.   -  person Rohit Bagjani    schedule 30.05.2017
comment
Цикл @GerhardBarnard for работает в Windows, и да, я упомянул вашу точку зрения (по-другому), что -f будет регистрировать только ошибки telnet на стороне клиента. И да, я хотел сделать это только для тестирования порта. У вас есть обходной путь для этого, который был бы действительно полезен?   -  person Rohit Bagjani    schedule 30.05.2017
comment
да, с помощью powershell. опубликует ответ.   -  person Gerhard    schedule 30.05.2017


Ответы (1)


от имени администратора откройте cmd.exe и выполните:

powershell set-executionpolicy Bypass

создайте новый файл и назовите его port-test.ps1

вставьте это в него.

param(
    [string] $rHost = $1,
    [int] $port = $2
     )

   write-host "Connecting to $rHost on port $port"
try {
  $socket = new-object System.Net.Sockets.TcpClient($rHost, $port)
} catch [Exception] {
  write-host $_.Exception.GetType().FullName
  write-host $_.Exception.Message
  exit 1
}

write-host "Connected.`n"
exit 0

теперь вы можете открыть cmd.exe и запустить его следующим образом:

powershell -file D:\test\port-test.ps1 hostnamename portnr

то есть powershell -file D:\test\telnetit.ps1 somehost.domain.com 23

Если соединение не работает, вы получите сообщение вида:

Connecting to somehost.domain.com on port 23 system.Management.Automation.MethodInvocationException Exception calling ".ctor" with "2" argument(s): "No connection could be made because the target machine actively refused it 10.1.2.3:23"

Однако, если это будет успешно, вы получите:

Connecting to somehost.domain.com on port 23 Connected.

person Gerhard    schedule 30.05.2017
comment
У меня было это решение, я искал решение непосредственно для пакетного файла для запуска командной строки. В любом случае спасибо. - person Rohit Bagjani; 30.05.2017
comment
для партии вы можете дождаться тайм-аута и отказа эха, если вы не можете подключиться, или эхо-подключения, когда вы это сделаете, но это более надежный метод. - person Gerhard; 30.05.2017