cpatte7372
asked on
VBScript Compilation Error
Hello Experts,
Can someone please help figure out why I'm getting the error shown in the attachment?
Can someone please help figure out why I'm getting the error shown in the attachment?
# $language = "VBScript"
# $interface = "1.0"
' ASSUMPTION: file being 'tailed' contains information
' similar to:
' Jan 5 18:26:13 device01 9927: Jan 5 18:26:12: %LINK-3-UPDOWN: Interface POS5/2, changed state to down
' Jan 5 18:26:47 device02 6332: Jan 5 18:26:46.243: %LINK-3-UPDOWN: Interface GigabitEthernet3/1, changed state to down
' Jan 5 18:28:40 device01 9937: Jan 5 18:28:39: %LINK-3-UPDOWN: Interface POS5/2, changed state to down
Sub Main()
' Make sure that we are running in Synchronous mode so
' that when WaitForStrings() finds something, we can
' capture the current line without risk of it already
' having flown by on the screen. This slows things down
' a bit, but provides insurance against errors due to
' SecureCRT and the script running asynchronously.
crt.Screen.Synchronous = true
' Start tailing a file...
crt.Screen.Send "tail tailfile.txt" & vbcr
' Example #1: Uses WaitForString to look for just the text
' we care about. Once the text is found, the
' line on which the text was located is captured
' and a piece of information is parsed using the
' Split() builtin VBScript method.
CaptureJustTheLinesWeCareAbout
' Example #2: Uses WaitForString to detect when every new line
' arrives from the remote. Each line of text is
' captured, and the Instr() builtin VBScript
' function is used to detect the presence of the
' specific text we care about. Iff it is present,
' the Split() builtin VBScript method is used to
' parse out the relevant piece of information.
'
' The benefit of this method over
' CaptureJustTheLinesWeCareAbout is that we
' can retrieve information from the line if
' the text we care about comes prior to the
' relevant piece of information that we would
' like to display as part of our notification.
'
' To enable this example, comment out the statement
' on line 29 and uncomment the line below:
' CaptureAllLinesAndSearchForTextWeCareAbout
End Sub
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub CaptureJustTheLinesWeCareAbout()
MsgBox "Capturing just the lines we care about"
do
' Look for specific output
crt.Screen.WaitForString "changed state to down"
' Once specific output is found, capture the line
' of text on which the "changed to state down" string
' was located.
szCurrentLine = crt.Screen.Get(crt.Screen.CurrentRow, _
0, _
crt.Screen.CurrentRow, _
crt.Screen.Columns)
' Trim off any leading or training spaces
szCurrentLine = Trim(szCurrentLine)
' Use the Split() method (builtin VBScript method)
' to get at the component we care about (deviceID)
vElements = Split(szCurrentLine, " ")
for each x in vElements
'document.write(x & "<br />")
next
MsgBox "Device """ & vElements(3) & """ just went down."
' Modify the "$" or the "->" in the array below to reflect the actual shell
' prompt you expect to find when authentication is successful to your remote
' machine.
PossibleShellPrompts = Array(_
"changed state to down:")
Do
Select Case objNewTab.Screen.MatchIndex
Case 1 ' "changed state to down:"
' Send the username
objNewTab.Screen.Send strUser & vbcr & "show ip int brief"
Case Else
DisplayMessage "Ooops! Looks like you forgot to add code " & _
"to handle this index: " & objNewTab.Screen.MatchIndex & _
vbcrlf & _
vbcrlf & _
"Modify your script code's ""Select Case"" block " & _
"to have 'Case' statements for all of the strings you " & _
"are passing to the ""WaitForStrings"" method."
objNewTab.Session.Disconnect
' Only attempt to close the tab if it's not *the* script tab
If crt.GetScriptTab().Index <> objNewTab.Index Then
objNewTab.Close
End If
Exit Sub
End Select
Loop
'MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & """ just went down."
'MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & "is " vElements(6)"
Loop
End Sub
scripterror3.png
I'm not familiar with SecureCRT, but on line 91 you are referencing an object named "objNewTab" that you never created in a prior Set statement. That looks like the cause of the error.
~bp
~bp
ASKER
Billprew,
Thanks for responding. I'm extremely new to scripting. Can you tell me where I need to create the 'Set' statement?
Cheers
Thanks for responding. I'm extremely new to scripting. Can you tell me where I need to create the 'Set' statement?
Cheers
ASKER
Hello Experts,
I changed the script to add the 'Set' statement as originally created. However, I'm now getting the error message shown in the attachment.
I changed the script to add the 'Set' statement as originally created. However, I'm now getting the error message shown in the attachment.
# $language = "VBScript"
# $interface = "1.0"
' ASSUMPTION: file being 'tailed' contains information
' similar to:
' Jan 5 18:26:13 device01 9927: Jan 5 18:26:12: %LINK-3-UPDOWN: Interface POS5/2, changed state to down
' Jan 5 18:26:47 device02 6332: Jan 5 18:26:46.243: %LINK-3-UPDOWN: Interface GigabitEthernet3/1, changed state to down
' Jan 5 18:28:40 device01 9937: Jan 5 18:28:39: %LINK-3-UPDOWN: Interface POS5/2, changed state to down
Sub Main()
' Make sure that we are running in Synchronous mode so
' that when WaitForStrings() finds something, we can
' capture the current line without risk of it already
' having flown by on the screen. This slows things down
' a bit, but provides insurance against errors due to
' SecureCRT and the script running asynchronously.
crt.Screen.Synchronous = true
' Start tailing a file...
crt.Screen.Send "tail tailfile.txt" & vbcr
' Example #1: Uses WaitForString to look for just the text
' we care about. Once the text is found, the
' line on which the text was located is captured
' and a piece of information is parsed using the
' Split() builtin VBScript method.
CaptureJustTheLinesWeCareAbout
' Example #2: Uses WaitForString to detect when every new line
' arrives from the remote. Each line of text is
' captured, and the Instr() builtin VBScript
' function is used to detect the presence of the
' specific text we care about. Iff it is present,
' the Split() builtin VBScript method is used to
' parse out the relevant piece of information.
'
' The benefit of this method over
' CaptureJustTheLinesWeCareAbout is that we
' can retrieve information from the line if
' the text we care about comes prior to the
' relevant piece of information that we would
' like to display as part of our notification.
'
' To enable this example, comment out the statement
' on line 29 and uncomment the line below:
' CaptureAllLinesAndSearchForTextWeCareAbout
End Sub
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub CaptureJustTheLinesWeCareAbout()
MsgBox "Capturing just the lines we care about"
do
' Look for specific output
crt.Screen.WaitForString "changed state to down"
' Once specific output is found, capture the line
' of text on which the "changed to state down" string
' was located.
szCurrentLine = crt.Screen.Get(crt.Screen.CurrentRow, _
0, _
crt.Screen.CurrentRow, _
crt.Screen.Columns)
' Trim off any leading or training spaces
szCurrentLine = Trim(szCurrentLine)
' Use the Split() method (builtin VBScript method)
' to get at the component we care about (deviceID)
vElements = Split(szCurrentLine, " ")
for each x in vElements
'document.write(x & "<br />")
next
MsgBox "Device """ & vElements(3) & """ just went down."
Set objNewTab = crt.Session.ConnectInTab( _
"/SSH2 " & strHost, _
bWaitForAuthToCompleteBeforeReturning, _
bLetCallerDetectAndHandleConnectionErrors)
Set objConfig = objNewTab.Session.Config
objNewTab.Screen.Synchronous = True
' Modify the "$" or the "->" in the array below to reflect the actual shell
' prompt you expect to find when authentication is successful to your remote
' machine.
PossibleShellPrompts = Array(_
"changed state to down:")
Do
objNewTab.Screen.WaitForStrings
Select Case objNewTab.Screen.MatchIndex
Case 1 ' "changed state to down:"
' Send the username
objNewTab.Screen.Send strUser & vbcr & "show ip int brief"
Case Else
DisplayMessage "Ooops! Looks like you forgot to add code " & _
"to handle this index: " & objNewTab.Screen.MatchIndex & _
vbcrlf & _
vbcrlf & _
"Modify your script code's ""Select Case"" block " & _
"to have 'Case' statements for all of the strings you " & _
"are passing to the ""WaitForStrings"" method."
objNewTab.Session.Disconnect
' Only attempt to close the tab if it's not *the* script tab
If crt.GetScriptTab().Index <> objNewTab.Index Then
objNewTab.Close
End If
Exit Sub
End Select
Loop
'MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & """ just went down."
'MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & "is " vElements(6)"
Loop
End Sub
scripterror4.png
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Hi Padas
I will read into the manual for guidance.
In the meantime, would be able to assist with the question at:
https://www.experts-exchange.com/questions/28162093/VB-Script-Modification-Request.html?anchorAnswerId=39268269#a39268269
Cheers
I will read into the manual for guidance.
In the meantime, would be able to assist with the question at:
https://www.experts-exchange.com/questions/28162093/VB-Script-Modification-Request.html?anchorAnswerId=39268269#a39268269
Cheers
ASKER
I've requested that this question be closed as follows:
Accepted answer: 0 points for cpatte7372's comment #a39268399
for the following reason:
cheers
Accepted answer: 0 points for cpatte7372's comment #a39268399
for the following reason:
cheers
ASKER
cheers
ASKER
I have updated the question with new question see above