3

How can I retrieve the names of all of the private MSMQ queues on the local machine, without using System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")? I'm using PowerShell so any solution using COM, WMI, or .NET is acceptable, although the latter is preferable.

Note that this StackOverflow question has a solution that returns all of the queue objects. I don't want the objects (it's too slow and a little flakey when there are lots of queues), I just want their names.

Damian Powell
  • 315
  • 2
  • 5
  • 10

3 Answers3

2

With Windows Server 2012 R2 you have the Message Queueing (MSMQ) Cmdlets installed, use the Cmdlet Get-MsmqQueue to get name and count.

Get-MsmqQueue | Select QueueName, MessageCount

Without Message Queueing (MSMQ) you can use Get-WmiObject

gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue | Select Name

Or over powershell remoting:

Invoke-Command -Session $sessions -ScriptBlock { Get-MsmqQueue | Select QueueName, MessageCount } 

or

$dataRaw = Invoke-Command -Session $sessions -ScriptBlock { gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue } 
$data | Sort-Object -Property PSComputerName,Name  | 
Format-Table  DisplayName, MessagesInQueue, PSComputerName
hdev
  • 630
  • 7
  • 17
1

There is a generic cmdlet command available in powershell Get-MsmqQueue, to accomplish the task in powershell: Get-MsmqQueue –QueueType Private | select QueueName

This will return names of the private queues in string array. Please be aware the type returned by get-msmqqueue cmdlet is Microsoft.Msmq.PowerShell.Commands.MessageQueue, not System.Messaging.MessageQueue, and seems these two types cannot be converted to each other.

Kai Zhao
  • 136
  • 1
  • 4
-1

In Powershell everything is an object. You can choose to list certain properties by using the select command which effectively discards the objects.

uSlackr
  • 6,337
  • 21
  • 36
  • Thanks, @uSlackr. I'm trying to avoid instantiating all the objects if I can help it, because it's very slow. Ideally, I want to instantiate only those queues that have a name matching a certain pattern. Since there is no API for that (that I'm aware of) I want to get the list of names, filter that, then retrieve each queue individually. – Damian Powell Jun 15 '12 at 14:56
  • `Select-Object` does not discard the object, it just limits the visible properties. – oɔɯǝɹ Jul 30 '16 at 16:15