Solved

Pass variable from Visual Basic .NET 2008 to VBScript

Posted on 2011-02-20
4
676 Views
Last Modified: 2012-06-27
I am writing a Visual Basic 2008 .NET program with a Textbox that will contain a user entered IP Address or Hostname. I'd like to pass this value to a VBScript.

I've done this successfully with some other things in the past, however this particular VBScript has an "InputBox" function that I'd like to replace with something like C:\RestartService.vbs <Hostname>

Even after doing some extensive searching, I'm just not getting it on how to accomplish this. I'm completely stuck on how to get VBScript to accept a single command line variable and I will have issues with my Visual Basic .NET example posted below once the VBS items are working.

Thanks for any help you can provide

I realize the functionality of this VBScript is probably something I could do in Visual Basic, but I really like how it functions and don't know how to convert the code.
'Restart Service VBScript
strComputer = InputBox ("Enter IP Address or Computer Name" , "Restart the Automatic Updates Service")
RestartServices ("strComputer"), "wuauserv"
'RestartServices ".", "SQLSERVERAGENT,MSSQLSERVER"


Sub RestartServices(Computer, ServiceNames)
  Dim ServiceName, Counter, aServiceNames

  'Get the array of service names  
  aServiceNames = split(ServiceNames,",")
  
  'loop services from beginning, stop them 
  For Each ServiceName In aServiceNames 
    StopService Computer, ServiceName, True
  Next 

  'loop services from end, start them 
  For Counter = ubound(aServiceNames) To 0 Step -1 
    StartService Computer, aServiceNames(Counter), True 
  Next 
End Sub

Sub StopService(Computer, ServiceName, Wait)
  Dim cimv2, oService, Result

  'Get the WMI administration object    
  Set cimv2 = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\cimv2")
	

  'Get the service object
  Set oService = cimv2.Get("Win32_Service.Name='" & ServiceName & "'")
  
  
  'Check base properties
  If Not oService.Started Then
    ' the service is Not started
    wscript.echo "The service " & ServiceName & " is Not started"
    exit Sub
  End If

  If Not oService.AcceptStop Then
    ' the service does Not accept stop command
    wscript.echo "The service " & ServiceName & " does Not accept stop command"
    exit Sub
  End If
  
  'wscript.echo oService.getobjecttext_

  'Stop the service
  Result  = oService.StopService
  If 0 <> Result Then
    wscript.echo "Stop " & ServiceName & " error: " & Result
    exit Sub 
  End If 
  
  Do While oService.Started And Wait
    'get the current service state
    Set oService = cimv2.Get("Win32_Service.Name='" & ServiceName & "'")

    wscript.echo now, "StopService", ServiceName, oService.Started, _
      oService.State, oService.Status
    Wscript.Sleep 200
  Loop   
End Sub


Sub StartService(Computer, ServiceName, Wait)
  Dim cimv2, oService, Result

  'Get the WMI administration object    
  Set cimv2 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\cimv2")

  'Get the service object
  Set oService = cimv2.Get("Win32_Service.Name='" & ServiceName & "'")
  
  
  'Path = "winmgmts:{impersonationLevel=impersonate}!\\" & Computer & _
  '  "\root\cimv2:Win32_Service.Name='" & ServiceName & "'" 

  'Get the WMI administration object of the service    
  'Set oService = GetObject(Path)

  'Check base properties
  If oService.Started Then
    ' the service is Not started
    wscript.echo "The service " & ServiceName & " is started."
    exit Sub
  End If
  
  'Start the service
  Result = oService.StartService
  If 0 <> Result Then
    wscript.echo "Start " & ServiceName & " error:" & Result
    exit Sub 
  End If 
  
  Do While InStr(1,oService.State,"running",1) = 0 And Wait 
    'get the current service state
    Set oService = cimv2.Get("Win32_Service.Name='" & ServiceName & "'")
    
    wscript.echo now, "StartService", ServiceName, oService.Started, _
      oService.State, oService.Status
    Wscript.Sleep 200
  Loop   
End Sub

Open in new window

Visual Basic example code to pass variable

Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim arguments As String

        arguments = "RestartService.vbs " & TextBox1.Text

        Process.Start("wscript.exe", arguments)

    End Sub

Open in new window

0
Comment
Question by:hpops
  • 2
4 Comments
 
LVL 7

Expert Comment

by:holthd
ID: 34938611
Setup your VBScript to handle arguments.
More information: http://technet.microsoft.com/en-us/library/ee156618.aspx
0
 
LVL 65

Accepted Solution

by:
RobSampson earned 500 total points
ID: 34939119
In the script, change these lines:
strComputer = InputBox ("Enter IP Address or Computer Name" , "Restart the Automatic Updates Service")
RestartServices ("strComputer"), "wuauserv"

to this:
strComputer = WScript.Arguments.Item(0)
RestartServices strComputer, "wuauserv"

Then your VB.NET call should work.

Having said that, this is the VB.NET equivalent that should work.

Dim controller As New ServiceController("wuauserv")
controller.Stop()
controller.WaitForStatus(ServiceControllerStatus.Stopped)
controller.Start()


Regards,

Rob.
0
 

Author Closing Comment

by:hpops
ID: 34939239
Thank you Rob. This is exactly what I needed.
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 34939278
No problem. I forgot to mention, if you want the VB.NET code to work, use this declaration:
Imports System.ServiceProcess

Regards,

Rob.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Introduction As chip makers focus on adding processor cores over increasing clock speed, developers need to utilize the features of modern CPUs.  One of the ways we can do this is by implementing parallel algorithms in our software.   One recent…
Over the years I have built up my own little library of code snippets that I refer to when programming or writing a script.  Many of these have come from the web or adaptations from snippets I find on the Web.  Periodically I add to them when I come…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

706 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

22 Experts available now in Live!

Get 1:1 Help Now