BizTalk Tips & Things

Agustin Mantaras BizTalk Blog

Visual basic script to start/stop any Windows service(s) in any server(s)

 

Well, i have been improving this script in several post and I think this is the most useful versión.

 

Functionalities

· Start a windows Service

· Stop a windows Service

· Do any of this actions in several services using Wildcards expressions

· Do any of this actions in 1 to n Servers.

Within the code you can have a look at the usage section to learn how to use it.

 

Requirements

· The user running the script should be local Administrator and have rights to stop the service you want to stop

· WMI and scripting execution rights (especially when you select to start or stop services in remote machines)

 

Usage

The script will return 0 IF ALL THE ACTIONS finish successfully and 1 if just on error found.

If an error is raised, the script will no continue.

 

Cscript ActServices.vbs ACTION;SERVICES;SERVERNAMEA[;SERVERB] [;SERVERC] [;SERVERN]

 

Parameters

 

ACTION  START / STOP

SERVICES  Service name to start or stop. You can use wildcards here like % 

BTSSVC% will act over the services called BTSSVC*

SERVERNAME à LIST OF SERVERS separated by ;

Examples:

· This will stop all BizTalk Services in localhost:

cscript “.\ActServices.vbs” START;’BTSSvc%%’;.

 

· This will stop MSE service in local host:

sscript “.\ActServices.vbs” START;’Microsoft.ManagedSolutions.Mse%%’;.

 

 

 

 

 

Output

· The script will quit with ResultCode of 0 if everything went well and 1 in case of error

· It will also show all the actions taken:

 

image

 

 

 

The code

The ActServices.vbs script

Just copy and paste this code into a file called ActServices.vbs :

VBScript ActBizTalkServerInstance.vbs
‘ Sample script to Stop Or Start ALL wildcard Services, it will return 0 if no errors found, 1 if any, and will exit when the error occurs (it will not finish the work).

‘EXAMPLES OF SERVICES WOULD BE:
‘    strService = ” ‘BTSSvc%’ ” ‘ WILL STOP/START ALL BIZTALK SERVICES
‘    strService = “‘Microsoft.ManagedSolutions.Mse.Runtime.ServiceHost.exe'” WILL STOP/START THE MSE

‘The Following example will stop all BizTalkHost instances in Server 1, 2 and 3
‘ SAMPLE USE: cScript ActBizTalkServerInstance STOP;’BTSSvc%’;Server1;Server2;Server3   (Note: without “;” at the end)
‘ Valid actions are : START or STOP
‘ Created by Agustín Mántaras Sept 2014
‘ ——————————————————-‘
‘Option Explicit
Dim objWMIService, objItem, objService, str, ReturnCode,i, Action
Dim colListOfServices, strService, intSleep ,sComputers,g_aComputers
strComputer = “.”

 

On Error Resume Next
   

Main

Sub Main
    ProcessArguments
   
    ReturnCode = 0 ‘By default the exit Code will be zero –> No error

   
    For i = 0 to UBound(g_aComputers)

        ‘Looping through the parameters to start/stop services in those machines

        if i = 0 Then
            ‘Parameter 0 should be the action to run –> START OR STOP
            StrAction = g_aComputers(i)
            if strAction <> “START” Then
                if strAction <> “STOP” Then
                    ReturnCode = 1
                        WScript.Echo “Invalid Action ” & strAction & ” only START and STOP are valid options”
                end if
            end if
        Else
            if i = 1 then
                ‘Paramter 1 will be the service name to stop.
                strService = g_aComputers(i)
           
            Else   
                    WScript.Echo “——————————————”
                    WScript.Echo “Service to interact with ”  & strService
                    WScript.Echo “Action to execute ” & strAction
                    WScript.Echo “——————————————”
                    WScript.Echo straction & “ING THE SERVICES IN SERVER ”  & g_aComputers(i)
                    ActBizTalkServices g_aComputers(i),strAction,strService
       
            end if
        End if
       
        if ReturnCode <> 0 then
            Exit For
        End if
    Next
   

    WScript.Echo  “Exit Code: ”  & ReturnCode ‘Returning 0 or 1
   
    WScript.Quit (ReturnCode)
End Sub

Sub ActBizTalkServices (strComputer,strAction,strService)
    ‘ NB strService is case sensitive.
    On Error Goto 0
    On Error Resume Next
    dim intNumberOfServices, intNumberOfActionsTaken
    intNumberOfActionsTaken = 0
    Set objWMIService = GetObject(“winmgmts:” _
    & “{impersonationLevel=impersonate}!\\” _
    & strComputer & “\root\cimv2”)
    Set colListOfServices = objWMIService.ExecQuery _
    (“Select * from Win32_Service Where Name like “_
    & strService & ” “)
   
    if err.Number = 0 Then
 
        ReturnCode = 1
       
           For Each objService in colListOfServices
                On error GoTo 0
                On Error Resume Next
                WScript.Echo “Attempting to ” & strAction & ” Service ” & objService.Name & ” in ” & strComputer
                IF strAction = “STOP” Then
                    objService.StopService()
                Else
                    objService.StartService()
                end if
               
                if err.Number = 0 then
                    ReturnCode = 0  ‘The action was sussecfully
                    Wscript.Echo “OK”
                    intNumberOfActionsTaken = intNumberOfActionsTaken +1
                   
   
                else
                    ‘Getting out the For loop since we get an error stopping a BizTalk Service
                   
                    ReturnCode = 1
                    WScript.Echo err.Description
                    ‘ReturnCode = err.number
                    WScript.Echo “FAIL. Exiting Process”
                   
                    Exit for          
                end if
        Next
‘        end if ‘ IF Ubound(colListOfServices) < 1 then
       ‘ WScritp.Echo “Actions ” & cstr(intNumberOfActionsTaken)
    Else
        WScript.Echo err.Description
        ReturnCode = 1
    end if
  
   
End Sub

 

Sub ProcessArguments()
    sSyntax = “CScript StopBizTalkServers.vbs ACTION [START/STOP];SERVICENAME+[WILDCARS];<computer[;computer]>” & vbNewLine & _
    ” <computer[;computer]>  List of computers to interact with services” & vbNewLine
   
    Set oArgs = WScript.Arguments
   
    SELECT CASE oArgs.Count
        CASE 0
            WScript.Echo sSyntax
            WScript.Quit
        CASE 1
            sComputers = oArgs(0)
        CASE Else
            WScript.Echo sSyntax
            WScript.Quit
    END SELECT
   
    ‘ Change any localhost entryies to be a period for WMI.
    g_aComputers = Split(sComputers, “;”)
    For i = 0 to UBound(g_aComputers)
        If LCase(g_aComputers(i)) = “localhost” Then
            g_aComputers(i) = “.”
        End If
    Next       
End Sub

 

 

Example code for Testing (START ACTION)

This script will start:

· ALL BizTalk Server host instances

· MSE

· IIS services.

To test it just create a cmd file in the same location that ActServices.vbs script.

cls

cscript “.\ActServices.vbs” START;’BTSSvc%%’;.

cscript “.\ActServices.vbs” START;’Microsoft.ManagedSolutions.Mse%%’;.

cscript “.\ActServices.vbs” START;’W3SVC%%’;.

pause

 

 

Example code for Testing (STOP ACTION)

This script will stop:

· ALL BizTalk Server host instances

· MSE

· IIS services.

To test it just create a cmd file in the same location that ActServices.vbs script.

cls

cscript “.\ActServices.vbs” STOP;’BTSSvc%%’;.

cscript “.\ActServices.vbs” STOP;’Microsoft.ManagedSolutions.Mse%%’;.

cscript “.\ActServices.vbs” STOP; ‘W3SVC %%’;.

pause