PowerBuilder
PowerBuilder
SSH to Cisco Switch - Processing "More" Responses
See more SSH Examples
Demonstrates connecting to a Cisco switch, running a command to enable privileged mode, then running a command to get a paged response requiring the SPACE char to be sent to process "--More--".Chilkat PowerBuilder Downloads
integer li_rc
integer li_Success
oleobject loo_Ssh
integer li_ChannelNum
oleobject loo_SaMatch
oleobject loo_SbReceived
integer li_MoreComing
li_Success = 0
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
loo_Ssh = create oleobject
li_rc = loo_Ssh.ConnectToNewObject("Chilkat.Ssh")
if li_rc < 0 then
destroy loo_Ssh
MessageBox("Error","Connecting to COM object failed")
return
end if
li_Success = loo_Ssh.Connect("SSH_SERVER_DOMAIN_OR_IP_ADDRESS",22)
if li_Success <> 1 then
Write-Debug loo_Ssh.LastErrorText
destroy loo_Ssh
return
end if
// Authenticate using login/password:
li_Success = loo_Ssh.AuthenticatePw("myLogin","myPassword")
if li_Success <> 1 then
Write-Debug loo_Ssh.LastErrorText
destroy loo_Ssh
return
end if
// Start a shell session.
li_ChannelNum = loo_Ssh.QuickShell()
if li_ChannelNum < 0 then
Write-Debug loo_Ssh.LastErrorText
destroy loo_Ssh
return
end if
// If the CISCO switch returns a prompt with ">", then read until we get the prompt.
// (It's not actually required that we do this, but it helps to know that all is OK at this point..)
li_Success = loo_Ssh.ChannelReceiveUntilMatch(li_ChannelNum,">","utf-8",1)
if li_Success <> 1 then
Write-Debug loo_Ssh.LastErrorText
destroy loo_Ssh
return
end if
// Show what we received so far:
Write-Debug loo_Ssh.GetReceivedText(li_ChannelNum,"utf-8")
// Send the "ena" command to enable privileged mode.
// (For the Cisco switch, terminate command with a single CR char.)
li_Success = loo_Ssh.ChannelSendString(li_ChannelNum,"ena~r","utf-8")
// Assume success for this example to make it shorter..
// Read to the "Password:" prompt.
li_Success = loo_Ssh.ChannelReceiveUntilMatch(li_ChannelNum,"Password:","utf-8",1)
if li_Success <> 1 then
Write-Debug loo_Ssh.LastErrorText
destroy loo_Ssh
return
end if
// Show what we received...
Write-Debug loo_Ssh.GetReceivedText(li_ChannelNum,"utf-8")
// Send the password.
li_Success = loo_Ssh.ChannelSendString(li_ChannelNum,"MY_PASSWORD_FOR_ELEVATED_PRIVILEGE~r","utf-8")
// The prompt now changes from "Something>" to "Something#>
// Read until the new prompt..
li_Success = loo_Ssh.ChannelReceiveUntilMatch(li_ChannelNum,"#","utf-8",1)
if li_Success <> 1 then
Write-Debug loo_Ssh.LastErrorText
destroy loo_Ssh
return
end if
// Show what we received...
Write-Debug loo_Ssh.GetReceivedText(li_ChannelNum,"utf-8")
// Send the "show running-config" command.
// The response will be in multiple pages, each ending with "--More--" and requiring a SPACE bar to be sent
// to get the next page.
li_Success = loo_Ssh.ChannelSendString(li_ChannelNum,"show running-config~r","utf-8")
// Consume the response until we end with another prompt.
loo_SaMatch = create oleobject
li_rc = loo_SaMatch.ConnectToNewObject("Chilkat.StringArray")
// Change "YOUR_PROMPT" to your actual prompt. We don't want to check for only "#" because
// it's not specific enough. The data in the response could contain the "#" char...
loo_SaMatch.Append("YOUR_PROMPT#")
loo_SaMatch.Append("--More--")
loo_SbReceived = create oleobject
li_rc = loo_SbReceived.ConnectToNewObject("Chilkat.StringBuilder")
li_MoreComing = 1
do while (li_MoreComing = 1)
li_Success = loo_Ssh.ChannelReceiveUntilMatchN(li_ChannelNum,loo_SaMatch,"utf-8",1)
if li_Success <> 1 then
Write-Debug loo_Ssh.LastErrorText
destroy loo_Ssh
destroy loo_SaMatch
destroy loo_SbReceived
return
end if
li_MoreComing = 0
loo_SbReceived.Clear()
loo_SbReceived.Append(loo_Ssh.GetReceivedText(li_ChannelNum,"utf-8"))
Write-Debug loo_SbReceived.GetAsString()
if loo_SbReceived.Contains("--More--",1) = 1 then
li_MoreComing = 1
// Send a SPACE char just as if we were interactively pressing the SPACE key to get more output.
li_Success = loo_Ssh.ChannelSendString(li_ChannelNum," ","utf-8")
end if
loop
loo_Ssh.Disconnect()
destroy loo_Ssh
destroy loo_SaMatch
destroy loo_SbReceived