Solved

VBS Script Help

Posted on 2013-06-11
33
389 Views
Last Modified: 2013-06-21
Hello Experts,

Can someone please help modify the script to highlight the name of the router when an output occurs on the router. For example, the script sends a message box with the message "device went down", however I would rather the message box stated the name of the device.

I would also like the script to send the following command after the statement hsrp appears: show run and log the results to text file.

Also, can you please show me how to add more variables? At the moment the script kicks in if the word hsrp appears. However, I would like to add ospf, bgp, eigrp and various other words.

I'm running version 6.5.3

You're help will be greatly appreciated.
NewScript.vbs
0
Comment
Question by:cpatte7372
  • 19
  • 14
33 Comments
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39239592
It looks like it prints this:

MsgBox "Device """ & vElements(3) & """ just went down."

Open in new window


Does vElements(3) not tell you which line is involved?

Comments suggest these are your lines:

'   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
0
 

Author Comment

by:cpatte7372
ID: 39239596
Number-1

Thanks for responding.

The script is taken from a website that I want to modify.

I should have removed;

 
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

As it's not relevant and confusing...
0
 

Author Comment

by:cpatte7372
ID: 39239598
I should also mention that I have very little scripting knowledge...
0
 

Author Comment

by:cpatte7372
ID: 39239613
Norman,

Do you understand my request?

Cheers
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39239625
I didn't see where the array vElements() is defined. I am guessing the that the device name would be in there.

If you assign your devices to the array and you have a Procedure for each device to enter the Procedure CaptureJustTheLinesWeCareAbout() then you can just output the device name.

Example:
vElements(1)="device01"
vElements(2)="device02"
vElements(3)="device03"

A neater way to do this would be changing the Procedure to accept the device name as in the example below. In your case you would call CaptureJustTheLinesWeCareAbout devicename


This page may be helpful - http://www.functionx.com/vbscript/Lesson06.htm

Sub Result()
    Dim dblHours, dblSalary
   
    CalcAndShowSalary dblHours, dblSalary
End Sub
Sub CalcAndShowSalary(Hours, Salary)
    Dim dblResult
   
    dblResult = Hours * Salary
    txtResult = dblResult
End Sub
0
 

Author Comment

by:cpatte7372
ID: 39239648
Number-1,

Thanks again for responding.

I'm afraid I don't think I've made myself clear.

The script was taken from the following site:

http://forums.vandyke.com/showthread.php?t=2426&highlight=getdata

You understand Cisco routers?

Cheers

Carlton
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39239684
Yes I understand Cisco routers. The script has an array. If you store the device name in the array you will have the output you want.

See this page for how those work:

http://www.tizag.com/vbscriptTutorial/vbscriptarrays.php

VBScript Code:
<script type="text/vbscript">
Dim myArray(3)
myArray(0) = "Clean Underwear"
myArray(1) = "Vacuum Cleaner"
myArray(2) = "New Computer"
myArray(3) = "Talking Bass"
document.write(myArray(0))
</script>
Display:
Clean Underwear
0
 

Author Comment

by:cpatte7372
ID: 39239692
Hi Number-1/experts

Thanks again for responding.

So, looking at the first request, the following code brings activates a message box:

crt.Screen.WaitForString "hsrp". However, "hsrp" isn't the only variable that I would like to see activate a message. I would also like the variable "bgp" also activate the message box.

I have tried the following:

crt.Screen.WaitForString "hsrp"
crt.Screen.WaitForString "bgp"

However, it doesn't work very well.

The second request concerns the message that appears in the message box when one of the variables above appears on a router.

I would like the message box to recognise the name of the router that generated the message, hsrp and put the name of the message in the message box. For example, if the name of the router was router999, I would the message box to state router999 just went down.

Sorry for not making myself clear.

I hope this helps you to help me.

Cheers mate
0
 

Author Comment

by:cpatte7372
ID: 39239712
Number-1,

Sorry if I sounded rude about you understanding Cisco routers.

So, I would I incorporate the arrays in my script?

Cheers
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39239718
OK, I see the array is just splitting the line.  Do you have an example of the line with "hsrp". Does it have a device name on the line?
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39239743
No problem cpatte7372. I was overlooking the array generation. You might try printing the other parts of the array to see if there's anything of interest.

MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & """ just went down."

Maybe there's even more like:

MsgBox "Device """ & vElements(4) & vElements(5) & """ just went down."
0
 

Author Comment

by:cpatte7372
ID: 39240178
Number-1

Thanks again for responding. Sorry for the delayed response - I fell asleep.

I will try your suggestion later this morning.

Cheers
0
 

Author Comment

by:cpatte7372
ID: 39245734
Number-1

I changed the script and added you're line at the end of the script.

An example of the output of when an interface goes down is as follows:

R1(config-if)#
*Jun 13 20:36:56.243: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to down

The message box that appears doesn't include the name of the device i.e. R1.

Is it possible to tweak the script so that it displays the name of the device i.e. R1 in the message box?

Also, I would like to add more arrays/varibles/strings (I'm not sure what it's called) to include:
"changed to state up".
"administratively down"
etc.

At the moment the message box only appears when the output on the displays:

*Jun 13 20:36:56.243: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to down

# $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, " ")

    MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & """ just went down."
  Loop

End Sub

Open in new window




Thanks
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39245826
The script is only going to print the message from the router. The message is already showing "changed state to down" so you can add more to the script like this assuming down/up is in position vElements(6).

MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & """ just went down."

MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & "is " [b]vElements(6)[/b]"

Open in new window


The problem is that the message may vary from router to router so the element in the array may be in a different position.

How many routers are you monitoring? It might be simpler to use a commercial product like Servers Alive


It may be possible to customize router messages but I have not had the need to do so. You might check with the manufacturer.

If you can determine the router name by the message then you can setup some logic to print the name automatically.

Example: Let's say that R1 is the only device that has  %LINK-3. then we could set a variable based on that text.

Jun 13 20:36:56.243: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to down
0
 

Author Comment

by:cpatte7372
ID: 39246027
Number-1

Thanks again for responding.  I will check out the script and link in the morning.

Cheers mate

I will give you feedback in the morning
0
 

Author Comment

by:cpatte7372
ID: 39246928
Hi Number-1

I keep on getting the following error message when I enter the line:

MsgBox "Device """ & vElements(0) & vElements(1) & vElements(2) & vElements(3) & "is " vElements(6)"


'Expected end of statement'

Can you help?

Cheers

Carlton
0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 

Author Comment

by:cpatte7372
ID: 39246980
Number-1/Experts,

I change the script to the following, but the I get the following out when the event occurs, please see attachment.

R1(config-if)#
*Mar  1 00:57:27.591: %LINK-5-CHANGED: Interface Ethernet0/0, changed state to administratively down
*Mar  1 00:57:28.591: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to down
R1(config-if)#


# $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, " ")

   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

Open in new window


I really the script to recognize the name of the device - in this case R1.


Help will be greatly appreciate
scriptissue.png
0
 

Author Comment

by:cpatte7372
ID: 39247052
If the above isn't possible, then could someone show me how modify the script so that when the event occurs, the script issues the following command and sends the output to a .txt file:

show run

Cheers
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39247495
Here's how VBscript split works which is all your script does.

http://www.w3schools.com/vbscript/func_split.asp

Example 1

<script type="text/vbscript">

a=Split("W3Schools is my favourite website")
for each x in a
    document.write(x & "<br />")
next

</script>
The output of the code above will be:

W3Schools
is
my
favourite
website

Open in new window

0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39247536
Try this to see if it produces  better output for you.

Apparently vElements(3) is now the date & time.

    vElements = Split(szCurrentLine, " ")

for each x in vElements 
    document.write(x & "<br />")
next

    MsgBox "Device """ & vElements(3) & """ just went down."

Open in new window


If you want the script to go to a file do this. Just make sure the file exists.

cscript NewScript.vbs > output.txt

If you want to create the file in the script you can do it like this:
http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/19ae0303-5b01-44ce-95a7-d18306f53ff0/

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("output.txt", True)

Open in new window

0
 

Author Comment

by:cpatte7372
ID: 39250688
Hello Experts,

Can someone please modify the following script so that when an event on a router triggers the output 'change state to down' the follow command is applied to the router and the results submitted to a text file.

show run

Can someone please 'actually' modify the script rather than provide examples - I have very limited to no scripting experience

 
# $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."

   '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

Open in new window

0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39250765
Did you try this in your script? It's not an example. I just quoted the example so you would understand what's going on.

    vElements = Split(szCurrentLine, " ")

for each x in vElements 
    document.write(x & "<br />")
next

    MsgBox "Device """ & vElements(3) & """ just went down."

Open in new window

0
 

Author Comment

by:cpatte7372
ID: 39250787
Hi Number-1,

I did try it but it failed.

Will give it another go now...
0
 

Author Comment

by:cpatte7372
ID: 39250790
Number-1,

I get the error message 'runtime error'

object required: 'document'
0
 

Author Comment

by:cpatte7372
ID: 39250792
Number-1

Where should I create 'document.write'?

Cheers
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39250806
It should work like this.



    ' 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."
  Loop

Open in new window

0
 

Author Comment

by:cpatte7372
ID: 39250808
Number-1

As I mentioned I keep on getting the following message:

I get the error message 'runtime error'

Cheers
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39250812
OK try this

for each x in vElements 
    document.write( " test <br />")
next

Open in new window

0
 
LVL 29

Accepted Solution

by:
Randy Downs earned 500 total points
ID: 39250823
Are you sure you are getting anything from your router? In the demo I describe below I am just using sample of text you said you get from your router. You can test my script on the demo page yourself.

Split is a simple function that just splits words out of a row of data. You should get something.

If I set the script & test here - http://www.w3schools.com/vbscript/tryit.asp?filename=vbdemo_intro. I get this output:

*Jun
13
20:36:56.243:
%LINK-3-UPDOWN:
Interface
FastEthernet0/0,
changed
state
to
down

<script type="text/vbscript">
   ' Trim off any leading or training spaces
    szCurrentLine = "*Jun 13 20:36:56.243: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to down"
    ' 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(1) & """ just went down."
</script>

Open in new window

0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39250833
You can also try this to see the raw data (i.e. not split). Note that I commented out (') the variable szCurrentLine so you print what you are getting from the router.

  ' Trim off any leading or training spaces
    'szCurrentLine = "*Jun 13 20:36:56.243: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to down"
    document.write(szCurrentLine  & " vElements not split <br /><br />")

    ' 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(1) & """ just went down."

Open in new window

0
 

Author Comment

by:cpatte7372
ID: 39251110
Number-1

I couldn't stay awake any longer

Anyway, I can get it to work without 'document.write( " test <br />"), however what is more important is that after the event has been highlighted in the message box the following command is sent to the router 'show ip int brief' and the results logged to a text file.

If you do have a solution can you please add the solution to my script rather than provide the solution in an example?

Cheers
0
 
LVL 29

Expert Comment

by:Randy Downs
ID: 39251198
What did you get with my sample? That part of the script works if the variable has data in it. If you have no data then you can't make it work with any script.
0
 

Author Closing Comment

by:cpatte7372
ID: 39265422
Number-1 you have been great. Cheers mate.
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Problem Description:   Couple of months ago we upgraded the ADSL line at our branch office from Home to Business line. The purpose of transforming the service to have static public IP’s. We were in need for public IP’s to publish our web resour…
There are two basic ways to configure a static route for Cisco IOS devices. I've written this article to highlight a case study comparing the configuration of a static route using the next-hop IP and the configuration of a static route using an outg…
After creating this article (http://www.experts-exchange.com/articles/23699/Setup-Mikrotik-routers-with-OSPF.html), I decided to make a video (no audio) to show you how to configure the routers and run some trace routes and pings between the 7 sites…
After creating this article (http://www.experts-exchange.com/articles/23699/Setup-Mikrotik-routers-with-OSPF.html), I decided to make a video (no audio) to show you how to configure the routers and run some trace routes and pings between the 7 sites…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now