Paul Gu | Blog

sharing is caring

WMI script to update receive handler host

In BizTalk Server 2004, sometime we need to update host for a receive handler, the script below will do the job.


Option Explicit

' wbemChangeFlagEnum Setting
const UpdateOnly = 1

UpdateReceiveHandler
' MSBTS_ReceiveHandler host association update
Sub UpdateReceiveHandler ()
	'Get the command line arguments entered for the script
	Dim Args: Set Args = WScript.Arguments

	'error handling is done by explicity checking the err object rather than using
	'the VB ON ERROR construct, so set to resume next on error.
	on error resume next
	
	'Make sure the expected number of arguments were provided on the command line.
	'if not, print usage text and exit.
	If (Args.Count <> 2) Then
		PrintUsage()
		wscript.quit 0
	End If

	Dim AdapterName, HostNameToSwitchTo

	AdapterName = Args(0)
	HostNameToSwitchTo = Args(1)

   Dim Query, ReceiveHandlerInstSet, Inst

   ' Look for the target WMI Class MSBTS_ReceiveHandler instance
   Query = "SELECT * FROM MSBTS_ReceiveHandler WHERE AdapterName =""" & AdapterName & """"
   Set ReceiveHandlerInstSet = GetObject("Winmgmts:!root\MicrosoftBizTalkServer").ExecQuery(Query)
   
   If ReceiveHandlerInstSet.Count > 0 Then

      For Each Inst In ReceiveHandlerInstSet
         ' Update host association
         Inst.HostNameToSwitchTo = HostNameToSwitchTo
         Inst.Put_(UpdateOnly)
         
         ' Check for error condition before continuing.
         CheckWMIError
         wscript.echo "Receive Handler - " & AdapterName & " " & HostNameToSwitchTo & " - has been updated sucessfully"
      Next
   Else
      wscript.echo "Receive Handler - " & AdapterName & " - cannot be found"
      wscript.quit 0
   End If

end Sub


'This subroutine deals with all errors using the WbemScripting object.  Error descriptions
'are returned to the user by printing to the console.
Sub   CheckWMIError()

   If Err <> 0   Then
      On Error Resume   Next

      Dim strErrDesc: strErrDesc = Err.Description
      Dim ErrNum: ErrNum = Err.Number
      Dim WMIError : Set WMIError = CreateObject("WbemScripting.SwbemLastError")

      If ( TypeName(WMIError) = "Empty" ) Then
         wscript.echo strErrDesc & " (HRESULT: "   & Hex(ErrNum) & ")."
      Else
         wscript.echo WMIError.Description & "(HRESULT: " & Hex(ErrNum) & ")."
         Set WMIError = nothing
      End   If
      
      wscript.quit 0
   End If

End Sub

Sub PrintUsage()
	WScript.Echo "Usage:" + Chr(10) + Chr(10) + _
				 "cscript UpdateReceiveHandlerHost.vbs [Adapter Name] [Host Name To Switch To]" + _
				 Chr(10) + Chr(10) + " Where: " + Chr(10) + _
				 "  [Adapter Name]           = The name of the adapter you wish to update." + _
				 Chr(10) + "       Example: 'MyFTPAdapter'" + Chr(10) + Chr(10) + _
				 "  [Host Name To Switch To] = The name of the BizTalk host to be applied to this adapter." + _
				 Chr(10) + "       Example: 'MyFTPHost'" + Chr(10) + Chr(10)
End Sub

Next Post

Previous Post

Leave a Reply

© 2024 Paul Gu | Blog

Theme by Anders Norén