Solved

Pass variable from Visual Basic .NET 2008 to VBScript

Posted on 2011-02-20
4
696 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

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

1.0 - Introduction Converting Visual Basic 6.0 (VB6) to Visual Basic 2008+ (VB.NET). If ever there was a subject full of murkiness and bad decisions, it is this one!   The first problem seems to be that people considering this task of converting…
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…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
Attackers love to prey on accounts that have privileges. Reducing privileged accounts and protecting privileged accounts therefore is paramount. Users, groups, and service accounts need to be protected to help protect the entire Active Directory …

730 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