We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

How to send commands via telnet session to a network switch in wndows?

Medium Priority
3,145 Views
Last Modified: 2012-05-07
Hi,

In any UNIX/LINUX box I can use the telnet client in combination with echo to create scripts and send commands to a Cisco router redirecting the console output to a file, for example:

     echo "user";\
     echo "password";\
     echo "term len 0";\
     echo "show version";\
     echo "q";\
     |telnet 10.10.10.10 > output.txt

According to two threads that I found here it seems that it is not possible to do this with MS telnet client so they used VB scripts. For example:

set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 100
WshShell.AppActivate "C:\Windows\system32\cmd.exe"
WScript.Sleep 100
WshShell.SendKeys "telnet 10.10.10.10{ENTER}"
WScript.Sleep 100
WshShell.SendKeys "abc{ENTER}" 'Username
WshShell.SendKeys "abc{ENTER}" 'Password
WScript.Sleep 100
WshShell.SendKeys "display ver{ENTER}"
WScript.Sleep 200
WshShell.SendKeys "exit{ENTER}" 'close telnet session'

The problem is that when I use the greater than character (">") to redirect the console output to a file, the file gets created but it remains empty after the session is closed. So how can I redirect the output? Also I was planning to use some kind of "command substitution" with some sort of loop in the script since I need to execute the commands with many network switches but again I don't know how to do it within the VB script file. Any ideas?
Comment
Watch Question

Commented:
This code will go through a list of switches in a file (should be ok to be either IP's or DNS names). And perform "SendCommand(switchname)" on each entry. (SendCommand performs your above script, but will add the switch name/ip each loop.

'Declare pulbic variables
strSwitchFile = ".\servers.txt"
strLogFile = ".\log-TEXTFILE.csv"
'============================================================
'Start
WriteToTxt Now & ",====================,Script Started,====================", strLogFile
' open server file for reading, get each server name and perform tests.
	ReadFileList
WriteToTxt Now & ",====================,Script Finished,====================", strLogFile
'Finish
'=============================================================
 
Sub ReadFileList
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	'On error resume next
	Set objSwitchFile = objFSO.OpenTextFile(strSwitchFile, 1)
	if err.number <> 0 then
		WriteToTxt(Now & ":  !ERROR!, Error opening " & strSwitchFile)
	else	
		' iterates through server list, then do Service checks if ping successful against PC name.
		Do Until objSwitchFile.AtEndOfStream
			strSwitch = trim(objSwitchFile.Readline)
			SendCommands(strSwitch)
		Loop
	end if
	on error goto 0
End Sub
 
Sub WriteToTxt(strWrite,strLogFile)
	'Appends lines to Log File
	Set FSO = CreateObject("Scripting.FileSystemObject")
	Set objOutputFile = FSO.OpenTextFile(strLogFile, 8, True)
	objOutputFile.WriteLine(strWrite)
	objOutputFile.close
End Sub
 
Sub SendCommands (strSwitch)
	set WshShell = WScript.CreateObject("WScript.Shell") 
	WScript.Sleep 100 
	WshShell.AppActivate "C:\Windows\system32\cmd.exe" 
	WScript.Sleep 100 
	WshShell.SendKeys "telnet " & strSwitch & "{ENTER}" 
	WScript.Sleep 100 
	WshShell.SendKeys "abc{ENTER}" 'Username
	WshShell.SendKeys "abc{ENTER}" 'Password
	WScript.Sleep 100 
	WshShell.SendKeys "display ver{ENTER}"
	WScript.Sleep 200 
	WshShell.SendKeys "exit{ENTER}" 'close telnet session'
End Sub

Open in new window

Commented:
Unlock this solution with a free trial preview.
(No credit card required)
Get Preview

Commented:
I'm not too sure on the file output issue , but you could try this as an alternative to the code you ahve.


set WshShell = WScript.CreateObject("WScript.Shell") 
WScript.Sleep 100 
WshShell.AppActivate "C:\Windows\system32\telnet.exe " & strSwitch & " > C:\Folder\output.txt"
WScript.Sleep 100 
WshShell.SendKeys "abc{ENTER}" 'Username
WshShell.SendKeys "abc{ENTER}" 'Password
WScript.Sleep 100 
WshShell.SendKeys "display ver{ENTER}"
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close telnet session'

Open in new window

Commented:
Oh and a caveat - I haven't tested this code , ther's porbably some syntax errors and spelling mistakes.
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a free trial preview!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.