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

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?
ecajigasAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

boowhupCommented:
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

0
boowhupCommented:
This one will use a command line argument I(so you can use another script/batch file to do the looping)
'	Declare pulbic variables
strLogFile = ".\log-TEXTFILE.csv"
'============================================================
'Start
WriteToTxt Now & ",====================,Script Started,====================", strLogFile
' open server file for reading, get each server name and perform tests.
	GetSwitch
WriteToTxt Now & ",====================,Script Finished,====================", strLogFile
'Finish
'=============================================================
 
 
Sub GetSwitch
	if Wscript.Arguments.Count = 1 then
		strSwitch = trim(Wscript.Arguments.item(0) & "")
		SendCommands(strSwitch)
	end if
 
	if Ping(strComputer) then
		GetServiceState strComputer,strServiceName
	else
		WriteToTxt Now & "," & strComputer & ",No Ping Response, ENDRESULT" ,strLogFile
	end if
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 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'
 
End Sub

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
boowhupCommented:
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

0
boowhupCommented:
Oh and a caveat - I haven't tested this code , ther's porbably some syntax errors and spelling mistakes.
0
astroviperCommented:
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
VB Script

From novice to tech pro — start learning today.