Get-RabbitMQQueueBinding.ps1

<#
.Synopsis
   Gets bindings for given RabbitMQ Queue.
 
.DESCRIPTION
   The Get-RabbitMQQueueBinding cmdlet gets bindings for given RabbitMQ Queue.
 
   The cmdlet allows you to show all Bindings for given RabbitMQ Queue.
   The result may be zero, one or many RabbitMQ.Connection objects.
 
   To get Connections from remote server you need to provide -HostName parameter.
 
   The cmdlet is using REST Api provided by RabbitMQ Management Plugin. For more information go to: https://www.rabbitmq.com/management.html
 
.EXAMPLE
   Get-RabbitMQQueueBinding vh1 q1
 
   This command gets a list of bindings for queue named "q1" on virtual host "vh1".
 
.EXAMPLE
   Get-RabbitMQQueueBinding -VirtualHost vh1 -Name q1 -HostName myrabbitmq.servers.com
 
   This command gets a list of bindings for queue named "q1" on virtual host "vh1" and server myrabbitmq.servers.com.
 
.EXAMPLE
   Get-RabbitMQQueueBinding vh1 q1,q2,q3
 
   This command gets a list of bindings for queues named "q1", "q2" and "q3" on virtual host "vh1".
 
.INPUTS
   You can pipe Name, VirtualHost and HostName to this cmdlet.
 
.OUTPUTS
   By default, the cmdlet returns list of RabbitMQ.QueueBinding objects which describe connections.
 
.LINK
    https://www.rabbitmq.com/management.html - information about RabbitMQ management plugin.
#>

function Get-RabbitMQQueueBinding
{
    [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='None')]
    Param
    (
        # Name of RabbitMQ Queue.
        [parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0)]
        [Alias("queue", "QueueName")]
        [string[]]$Name = "",

        # Name of the virtual host to filter channels by.
        [parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$true)]
        [Alias("vh", "vhost")]
        [string]$VirtualHost,

        # Name of the computer hosting RabbitMQ server. Defalut value is localhost.
        [parameter(ValueFromPipelineByPropertyName=$true, Position=2)]
        [Alias("HostName", "hn", "cn")]
        [string]$BaseUri = $defaultComputerName,

        # Credentials to use when logging to RabbitMQ server.
        [Parameter(Mandatory=$false)]
        [PSCredential]$Credentials = $defaultCredentials
    )

    Begin
    {
    }
    Process
    {
        if (-not $VirtualHost)
        {
            # figure out the Virtual Host value
            $p = @{}
            $p.Add("Credentials", $Credentials)
            if ($BaseUri) { $p.Add("BaseUri", $BaseUri) }
            
            $queues = Get-RabbitMQQueue @p | ? Name -eq $Name

            if (-not $queues) { return; }

            if (-not $queues.GetType().IsArray)
            {
                $VirtualHost = $queues.vhost
            } else {
                $vhosts = $queues | select vhost
                $s = $vhosts -join ','
                Write-Error "Queue $Name exists in multiple Virtual Hosts: $($queues.vhost -join ', '). Please specify Virtual Host to use."
            }
        }

        if ($pscmdlet.ShouldProcess("server $BaseUri", "Get bindings for queue(s): $(NamesToString $Name '(all)')"))
        {
            foreach ($n in $Name)
            {
                $result = GetItemsFromRabbitMQApi -BaseUri $BaseUri $Credentials "queues/$([System.Web.HttpUtility]::UrlEncode($VirtualHost))/$([System.Web.HttpUtility]::UrlEncode($n))/bindings"

                $result | Add-Member -NotePropertyName "HostName" -NotePropertyValue $BaseUri

                SendItemsToOutput $result "RabbitMQ.QueueBinding"
            }
        }
    }
    End
    {
    }
}