Tired of having to go into BizTalk Server Admin and terminate any suspended Orchestration instance before you want to redeploy?

Scripting this task is very simple using WMI. Just create a file called Terminate.vb and copy in this code:

TerminateAllOrchs

Sub TerminateAllOrchs

  Query = "SELECT * FROM MSBTS_ServiceInstance where ServiceClass = 1"

  Set InstSet = GetObject("Winmgmts:!root\MicrosoftBizTalkServer").ExecQuery(Query)

  For Each Inst In InstSet

    Inst.Terminate

  Next

End Sub

Running the script will terminate all Orchestration instances.

Note: This will terminate all Orchestrations so please use caution.

It could be further parameterized to only terminate specific Orchestrations.  The Query would look like:

Query = "SELECT * FROM MSBTS_ServiceInstance where ServiceClass = 1 and AssembliName='<name>'"

With <name> being the Assembly name of the Orchestration.

If you are using a helper .net class in your Solution, you can set this up as a pre or post build event so every time you deploy you'll not have to worry about deployment errors due to suspended Orchestration instances. 

To set this up, just put the path to the vb script file in the event text box.

Again, I better stress this should only be used in cases that you are sure terminating all Orchestrations is what you really want to do.  But it can be a great time saver for development.