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!