首页 > 解决方案 > telnet 上的变量

问题描述

我对编码很陌生,我需要一个小自动化批处理文件。

我通常只是从 CMD 打开 Telnet 并执行以下操作:

我输入:o 192.168.1.248

然后我连接到发送字符串WE1*1RTMP的设备,设备响应E1*1RTMP

这是正确的,一切正常。

但我想让它自动化,而不需要我输入所有内容,只需启动一个 .bat 文件。

当命令被接收并正确执行时,我得到的答案是E1*1RTMP,但我很想有一些东西来检查这个。就像我得到的响应和这个一样,一切都在运行后消失,但如果响应有什么不同,就像E10我输入一个无法从设备识别的命令时得到的错误,而不是消失 cmd windows只是说“嘿,你的命令失败”或类似的东西。

我也可以使用 SSH 发送此命令,我有另一个名为“REC”的 Plink 配置文件通过 SSH 连接我,如果这与 telnet 相比更容易自动化的话。

我该如何存档?感谢所有愿意提供帮助的人。

标签: batch-filetelnet

解决方案


我将示例脚本修改为更严格,并使用 yoru 命令和 IP 并执行 telnet 而不是 SSH 等。

REM Script Name:  TelnetToDevice.cmd
@(
  SETLOCAL EnableDelayedExpansion
  ECHO OFF
  REM SETUP Device Connection Details and commands
  SET "_PLink.Path=%~dp0plink.exe"
  SET "_PLink.Method=-telnet"
  REM SET "_PLink.Method=-ssh"
  SET "_Device.User=USERNAME"
  SET "_Device.PW=PASSWORD"
  SET "_Devices.List="192.1568.1.248""
  SET "_Devices.Cmd.List="WE1*1RTMP""
  SET /A "_Results.Count=0"
)


FOR %%A IN (%_Devices.List%) DO (
  FOR %%B IN (%_Devices.Cmd.List%) DO (
    FOR /F "Tokens=*" %%C IN ('
      ECHO.Y^|%_PLink.Path% %_PLink.Method% %_Device.User%@%%~A -pw %_Device.PW% "%%~B"
    ') DO (
      ECHO.Results is "%%C"
      SET /A "_Results.Count+=1"
      SET "_Result.!_Results.Count!=%%C"
    )
  )
)

ECHO.
ECHO.Listing all Variables generated:
ECHO.
SET "_Result."

PAUSE

(
  ENDLOCAL
  EXIT /B 0
)

好的,如果您只需要收集该命令的输出,可能会启动另一个命令作为响应,那么使用 PLINK 在 CMD 中执行此操作相当容易,并且 NCAT 应该也可以工作。

(我使用 Plink 从 CMD 连接到我们的 Cisco 设备以收集数据,并在收到某些响应时运行一些简单的命令)

这是通过在FOR /F循环中解析结果来捕获命令的输出来完成的。

在 CLI 直接:

NCAT

FOR /F "Tokens=*" %A IN ('
  ECHO.WE1*1RTMP^| ncat 192.1568.1.248 23
') DO (
  ECHO.%%A
  SET "_Result=%%A"
)

链接

FOR /F "Tokens=*" %A IN ('
  plink.exe -load RECtelnet ^< "C:\path\to\file containing WE1*1RTMP command.txt"
') DO (
  ECHO.%%A
  SET "_Result=%%A"
)

请注意,我假设您知道在上述命令中,在这些情况下您将需要提供用户名密码等,正如您所说,这些是正常工作的命令。

我碰巧有一个脚本,我用它来连接多个设备并运行命令,它对你的需要来说太过分了,我会写一个精简的版本,但将它作为在 CMD 中运行的示例似乎是值得的脚本:

这是我用来检查和修复光纤交换机的实际 CMD 脚本的外壳:

@(
    SETLOCAL ENABLEDELAYEDEXPANSION
    ECHO OFF
    REM SETUP Device Connection Details and commands
    SET "_PLink.Path=%~dp0plink.exe"
    SET "_Device.User=USERNAME"
    SET "_Device.PW=PASSWORD"
    SET "_Devices.List="IP/Hostname1" "IP/Hostname_2" "IP/Hostname_3" "IP/HostnameN""
    SET "_Devices.Cmd.List="show feature ^| inc http" "show system internal flash ^| include Mount" "show system internal flash ^| include tmp" "dir ^| include free" "show system internal dir /var/tmp ^| Inc 'log.+[0-9][0-9][0-9][0-9][0-9][0-9]'" "show environment fan ^| ex ---- ^| ex Filter" "show environment temperature ^| ex ---- ^| ex '('""

    REM Setup Log files and Email
    CALL :GetDateTime
    SET "_Log.Folder=%~dp0Log"
    SET "_eMail.Folder=%~d0\Temp"
    IF NOT EXIST "!_Log.Folder!" ( MD "!_Log.Folder!" )
    IF NOT EXIST "!_eMail.Folder!" ( MD "!_eMail.Folder!" )
    SET "_Log.File=!_Log.Folder!\%~n0_Log_!IsoDate!_!IsoTime!.log"
    SET "_eMail.File=!_eMail.Folder!\%~n0_eml.tmp"
    SET "_eMail.Subject=%~n0 - Log"
    ECHO.>"!_eMail.File!"
    SET "_SMTPServer=SMTPServerIP"
    SET "_RcptTo=Yourname@YourDomain.com"
    SETLOCAL DISABLEDELAYEDEXPANSION
)
CALL :Main


(
    ENDLOCAL
    Exit /b %eLvl%
)


:Main
    FOR %%A IN (%_Devices.List%) DO (
        CALL :OutEcho
        CALL :DateEcho %%~A:
        FOR %%B IN (%_Devices.Cmd.List%) DO (
            FOR /F "Tokens=*" %%C IN ('
                ECHO.Y^|%_PLink.Path% -ssh %_Device.User%@%%~A -pw %_Device.PW% "%%~B"
            ') DO (
                CALL :OutEcho %%~A: %%~C
                (
                    ECHO.%%~C | FIND /I "log" >NUL
                ) && (
                    FOR /F "Tokens=1" %%D IN ("%%~C") DO (
                        CALL :OutEcho %%~A: Deleting:  %%~D
                        FOR %%b IN (
                            %_Devices.Cmd.DeleteFoundFile%
                        ) DO (
                            FOR /F "Tokens=*" %%c IN ('
                                %_PLink.Path% -ssh %_Device.User%@%%~A -pw %_Device.PW% "%%~b%%~D"
                            ') DO (
                                CALL :OutEcho %%~A: %%~c
                            )
                            CALL :OutEcho %%~A: Deleted:  %%~D
                        )
                    )
                )
            )
        )

    )
    CALL :SendMail "%_eMail.File%" "%_eMail.Subject%"
GOTO :EOF


:SendMail
    ECHO.Sending Email for "%~2"
    CALL ECHO CALL "%~dp0mailsend.exe" -domain reval.com -smtp %_SMTPServer% -f %Computername%@reval.com -t %_RcptTo% -sub "%~2" -attach "%~1",text,i
    CALL "%~dp0mailsend.exe" -domain reval.com -smtp %_SMTPServer% -f %Computername%@reval.com -t %_RcptTo% -sub "%~2" -attach "%~1",text,i
GOTO :EOF


:DateEcho
    (
        SETLOCAL
        CALL :GetDateTime
    )
    CALL :OutEcho %TDate% - %*
    ENDLOCAL
GOTO :EOF


:OutEcho
    ECHO.%*
    ECHO.%*>>"%_Log.File%"
    ECHO.%*>>"%_eMail.File%"
GOTO :EOF


:GetDateTime
    FOR /F "Tokens=1-7 delims=MTWFSmtwfsouehrandit:-\/. " %%A IN ("%DATE% %TIME: =0%") DO (
        FOR /F "Tokens=2-4 Skip=1 Delims=(-)" %%a IN ('ECHO.^| DATE') DO (
            SET "%%~a=%%~A"
            SET "%%~b=%%~B"
            SET "%%~c=%%~C"
            SET /a "#%%~a=1%%~A - (2%%~A-1%%~A)"
            SET /a "#%%~b=1%%~B - (2%%~B-1%%~B)"
            SET /a "#%%~c=1%%~C - (2%%~C-1%%~C)"
            SET "HH=%%~D"
            SET "Mn=%%~E"
            SET "SS=%%~F"
            SET "Ms=%%~G"
            SET /a "#HH=1%%~D - (2%%~D-1%%~D)"
            SET /a "#Mn=1%%~E - (2%%~E-1%%~E)"
            SET /a "#SS=1%%~F - (2%%~F-1%%~F)"
            SET /a "#Ms=1%%~G - (2%%~G-1%%~G)"
            SET /a "#TMinutes=((1%%~D - (2%%~D-1%%~D))*60)+(1%%~E - (2%%~E-1%%~E))"
            SET /a "#TSeconds=((((1%%~D - (2%%~D-1%%~D))*60)+(1%%~E - (2%%~E-1%%~E)))*60)+(1%%~F - (2%%~F-1%%~F))"
        )
    )
    SET "TTime=%HH%.%Mn%.%SS%"
    SET "IsoTime=%HH%.%Mn%.%SS%.%Ms%"
    SET "TDate=%yy%-%mm%-%dd%"
    SET "IsoDate=%yy%-%mm%-%dd%"
GOTO :EOF

下面是一个更严格的脚本,它直接使用您提供的信息。

REM Script Name:  TelnetToDevice.cmd
@(
  SETLOCAL EnableDelayedExpansion
  ECHO OFF
  REM SETUP Device Connection Details and commands
  SET "_PLink.Path=%~dp0plink.exe"
  SET "_PLink.Method=-telnet"
  REM SET "_PLink.Method=-ssh"
  SET "_Device.User=USERNAME"
  SET "_Device.PW=PASSWORD"
  SET "_Devices.List="192.1568.1.248""
  SET "_Devices.Cmd.List="WE1*1RTMP""
  SET /A "_Results.Count=0"
)


FOR %%A IN (%_Devices.List%) DO (
  FOR %%B IN (%_Devices.Cmd.List%) DO (
    FOR /F "Tokens=*" %%C IN ('
      ECHO.Y^|%_PLink.Path% %_PLink.Method% %_Device.User%@%%~A -pw %_Device.PW% "%%~B"
    ') DO (
      ECHO.Results is "%%C"
      SET /A "_Results.Count+=1"
      SET "_Result.!_Results.Count!=%%C"
    )
  )
)

ECHO.
ECHO.Listing all Variables generated:
ECHO.
SET "_Result."

PAUSE

(
  ENDLOCAL
  EXIT /B 0
)

推荐阅读