Here’s another sample PowerShell script, this time to manage BizTalk Server ports
and receive locations. This one can:

  • List all send ports

  • List all receive ports and their associated receive locations

  • List all send port groups and what send ports are associated with each one

  • Enable/Disable a receive location

  • Start/Stop/Enlist/Unenlist a send port

Here’s the code:

#
# declare our parameters: the action to take
#
param(
   [string] $action=$(throw ‘need action’),
   [string] $name,
   [string] $status
)


#
# Helper function to list all WMI objects of
# a given type
#
function bts-list-objs($kind)
{
   get-wmiobject $kind `
      -namespace ‘root\MicrosoftBizTalkServer’
}

#
# display all information about a receive port
#
function bts-display-recv-port($port)
{
   $portname = $port.Name
   $portname
   $recvlocs = get-wmiobject MSBTS_ReceiveLocation `
      -namespace ‘root\MicrosoftBizTalkServer’ `
      -filter “ReceivePortName=’$portName'”

   $recvlocs | ft Name, AdapterName, InboundTransportURL,
IsDisabled
}

#
# display all information about a send port group
#
function bts-display-send-port-group($group)
{
   $groupname = $group.Name
  

   $ports = get-wmiobject MSBTS_SendPortGroup2SendPort `
      -namespace ‘root\MicrosoftBizTalkServer’ `
      -filter “SendPortGroupName=’$groupName'”

   $groupname
   foreach ($port in $ports) { “`t” + $port.SendPortName }
}

#
# enable or disable the specified
# receive location
#
function bts-set-recv-loc-status($name, $status)
{
   $recvloc = get-wmiobject MSBTS_ReceiveLocation `
      -namespace ‘root\MicrosoftBizTalkServer’ `
      -filter “Name=’$name'”
  

   switch ( $status )
   {
      ‘disable’ { $recvloc.psbase.invokemethod(‘Disable’,
$null) }
      ‘enable’ { $recvloc.psbase.invokemethod(‘Enable’, $null)
}
   }
}

#
# controls a send port
#
function bts-set-send-port-status($name, $status)
{
   $sendport = get-wmiobject MSBTS_sendPort `
      -namespace ‘root\MicrosoftBizTalkServer’ `
      -filter “Name=’$name'”

   switch ( $status )
   {
      ‘start’ { $sendport.psbase.invokemethod(‘Start’, $null)
}
      ‘stop’ { $sendport.psbase.invokemethod(‘Stop’, $null)
}
      ‘enlist’ { $sendport.psbase.invokemethod(‘Enlist’,
$null) }
      ‘unenlist’ { $sendport.psbase.invokemethod(‘UnEnlist’,
$null) }
   }
}

function is-valid-opt($check, $options)
{
   foreach ( $val in $options )
   {
      if ( $check -eq $val ) {

         return $true
      }
   }
}

#
# main script
#
switch ( $action )
{
   ‘list-send-ports’ {
      bts-list-objs(‘MSBTS_SendPort’) | ft Name, PTAddress,
Status
   }
   ‘list-send-port-groups’ {
      bts-list-objs(‘MSBTS_SendPortGroup’) | %{ bts-display-send-port-group($_)
}
   }
   ‘list-recv-ports’ {
      bts-list-objs(‘MSBTS_ReceivePort’) | %{ bts-display-recv-port($_)
}
   }
   ‘set-recv-loc-status’ {
      if ( !(is-valid-opt $status (‘enable’, ‘disable’))
)
      {
         throw ‘invalid status’
      }
      if ( ($name -eq ”) -or ($name -eq $null) )
      {
         throw ‘you must supply the receive
location name’
      }
      bts-set-recv-loc-status $name $status
   }
   ‘set-send-port-status’ {
      if ( !(is-valid-opt $status (‘start’, ‘stop’, ‘enlist’,
‘unenlist’)) )
      {
         throw ‘invalid status’
      }
      if ( ($name -eq ”) -or ($name -eq $null) )
      {
         throw ‘you must supply the send port
name’
      }
      bts-set-send-port-status $name $status
   }
}

Enjoy!