BizTalk Ports with PowerShell

Link. September 7, 2006. Comments [0]. Posted in: BizTalk | PowerShell

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' { [void]$recvloc.Disable() }
      'enable' { [void]$recvloc.Enable() }
   }
}

#
# 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' { [void]$sendport.Start() }
      'stop' { [void]$sendport.Stop() }
      'enlist' { [void]$sendport.Enlist() }
      'unenlist' { [void]$sendport.UnEnlist() }
   }
}

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!



Comments are closed.

Syndicate

About

Tomas Restrepo is a software developer located in Colombia, South America. His interests include .NET, Connected Systems, PowerShell and lately dynamic programming languages. More...

tomasrestrepo @ twitter My Flickr photostream My saved links on delicious My Technorati Profile

email: tomas@winterdom.com
msn: tomasr@passport.com

View my profile on LinkedIn

MVP logo

Ads


Categories

Statistics

Total Posts: 1050
This Year: 1
This Month: 1
This Week: 0
Comments: 825

Archive

Other

Copyright © 2002-2008, Tomas Restrepo.

Powered by: newtelligence dasBlog 2.2.8279.16125

Sign In