PowerShell script to Start or Stop All BizTalk Host Instances
# Import external assembly and create a new object
[void]Â [System.reflection.Assembly]::LoadWithPartialName(“Microsoft.BizTalk.ExplorerOM”)
$Catalog = New-Object Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer
Â
 #BizTalk Config
$Catalog.ConnectionString = “SERVER=JEETU;DATABASE=BizTalkMgmtDb;Integrated Security=SSPI”  #connectionstring for the BizTalkMgmtDb
$Hostinst = “” # Define variable for host instances
$resultToWrite=“”
$OutResultLog = ‘E:\Biztalk\BizTalkLive\BizTalkPowerShellService\StartStopHostInstnace\logStartStopHostInstance.txt’
#$ServerName=”” #Define running server name
Â
#Function to start host instances with filter condition
function StartHostInstance()
{
    $resultToWrite=‘Process has started to start host instance on date : ‘+(Get-Date).ToString()
    Add-Content $OutResultLog $resultToWrite
    $resultToWrite=“”
Â
    #get all in-process host instances
    [ARRAY]$hostInstances = Get-WmiObject MSBTS_HostInstance -namespace “root\MicrosoftBizTalkServer” -Filter “(HostType = 1 )” # and RunningServer = ‘$ServerName’ –If you want to add server in filter co
Â
   foreach ($Hosts in $catalog.Hosts )
  {
       foreach($Hostinstance in $Hosts ){
       try
      {
            $Hostinst = $Hostinstance.Name
          Â
             foreach($hostinst1 in $hostInstances | WHERE {($_.HostName -eq $Hostinst) -and ($_.HostName -notlike ‘BizTalkLive’)}) {
             Â
                if ($hostinst1.ServiceState -eq 1)   # 1 = host instance is stoped
               {
                    $hostinst1.Start()
                    #Wait for few seconds
                    Start-Sleep -s 2
Â
                    $resultToWrite=$resultToWrite+ ‘Started host instance: ‘+$Hostinst+ ‘ at datetime :’+(Get-Date).ToString()
                    Add-Content $OutResultLog $resultToWrite
                    $resultToWrite=“”
               }
           }
       }
        catch [Exception]
       {
            $resultToWrite=$resultToWrite+ ‘Getting Exception: ‘+ $_.Exception.Message +‘ to Start host instance: ‘+$Hostinst+ ‘ at datetime: ‘+(Get-Date).ToString()+“`r`n”
            Add-Content $OutResultLog $resultToWrite
            $resultToWrite=“”
       }
Â
      }
}
$resultToWrite=$resultToWrite+Â ‘Process end to start host instance on datetime: ‘+(Get-Date).ToString()Â +“`r`n”
Add-Content $OutResultLog $resultToWrite #logged all details in log file
[void]$Catalog.Refresh()
}
Â
#Function to stop host instances with filter condition
function StopHostInstance()
{
    $resultToWrite=‘Process has started to stop host instance on date : ‘+(Get-Date).ToString()
    Add-Content $OutResultLog $resultToWrite
    $resultToWrite=“”
Â
    #get all in-process host instances
    [ARRAY]$hostInstances = Get-WmiObject MSBTS_HostInstance -namespace “root\MicrosoftBizTalkServer” -Filter “(HostType = 1 )” # and RunningServer = ‘$ServerName’ –If you want to add server in filter co
Â
   foreach ($Hosts in $catalog.Hosts )
  {
       foreach($Hostinstance in $Hosts ){
       try
      {
            $Hostinst = $Hostinstance.Name
          Â
             foreach($hostinst1 in $hostInstances | WHERE {($_.HostName -eq $Hostinst) -and ($_.HostName -notlike ‘BizTalkLive’)}) {
             Â
                if ($hostinst1.ServiceState -eq 4)   # 4 = host instance is running
               {
                    $hostinst1.Stop()
                    #Wait for few seconds
                    Start-Sleep -s 2
Â
                    $resultToWrite=$resultToWrite+ ‘Stopped host instance: ‘+$Hostinst+ ‘ at datetime :’+(Get-Date).ToString()
                   Add-Content $OutResultLog $resultToWrite
                    $resultToWrite=“”
               }
           }
       }
        catch [Exception]
       {
            $resultToWrite=$resultToWrite+ ‘Getting Exception: ‘+ $_.Exception.Message +‘ to Stop host instance: ‘+$Hostinst+ ‘ at datetime: ‘+(Get-Date).ToString()+“`r`n”
            Add-Content $OutResultLog $resultToWrite
            $resultToWrite=“”
       }
Â
      }
}
$resultToWrite=$resultToWrite+Â ‘Process end to stop host instance on datetime: ‘+(Get-Date).ToString()Â +“`r`n”
Add-Content $OutResultLog $resultToWrite #logged all details in log file
[void]$Catalog.Refresh()
}
Â
 #call function to start host instances
   StartHostInstance
Â
 #call function to start host instances
  StopHostInstance
Â
