Extended vbs to start/stop all BizTalk host instances in several servers

 

Warning: do not try this directly in production without test it!!! Sonrisa

 Some services may require Administrator rights to be Started / Stopped

'-------------------------------------------------------'
' VBScript ActBizTalkServerInstance.vbs
' Sample script to Stop Or Start ALL BizTalk 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).
' The Following example will stop all BizTalkHost instances in Server 1, 2 and 3
' SAMPLE USE: cScript ActBizTalkServerInstance STOP;Server1;Server2;Server3 (Note: without ";" at the end)
' Valid actions are : START or STOP
' Created by Agustín Mántaras Sept 2014
' -------------------------------------------------------'

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 = 1 'By default the exit Code will be 1--> error

   
For i = 0 to UBound(g_aComputers)
'Looping through the parameters to get stop BizTalk Servers host intances 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
end if
end if
Else
ActBizTalkServices g_aComputers(i),strAction
End if

if ReturnCode <> 0 then

Exit For
End if
Next
   

    WScript.Echo ReturnCode 'Returning 0 or 1

WScript.Quit (ReturnCode)
End Sub 'Main

Sub ActBizTalkServices (strComputer,strAction)
' NB strService is case sensitive.
On Error Goto 0
On Error Resume Next
strService = " 'BTSSvc%' "
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
'Something Went wrong when getting server names
ReturnCode = 0
   

        For Each objService in colListOfServices
On error GoTo 0
On Error Resume Next
IF strAction = "STOP" Then
objService.StopService()
Else
objService.StartService()
end if

if err.Number = 0 then
ReturnCode = 0 'The action was sussecfully

            else
'Getting out the For loop since we get an error stopping a BizTalk Service

ReturnCode = err.number

Exit for
end if
Next
Else
ReturnCode = 1
end if

End Sub 'ActBizTalkServices

 

Sub ProcessArguments()
sSyntax = "CScript StopBizTalkServers.vbs ACTION [START/STOP];<computer[;computer]>" & vbNewLine & _
" <computer[;computer]> List of computers to create and start the perfmon log." & 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 'ProcessArguments