如何有效地检索所有私有MSMQ队列的名称?

如何检索本地计算机上所有私有MSMQ队列的名称 ,而不使用System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".") ? 我正在使用PowerShell,所以任何使用COM,WMI或.NET的解决scheme都是可以接受的,尽pipe后者更可取。

请注意, 这个StackOverflow问题有一个解决scheme,返回所有的队列对象。 我不想要这些对象(当队列很多的时候,它太慢了,还有一点点的问题),我只想要他们的名字。

使用Windows Server 2012 R2安装了消息队列(MSMQ) Cmdlet,使用Cmdlet Get-MsmqQueue获取名称和计数。

 Get-MsmqQueue | Select QueueName, MessageCount 

没有消息队列(MSMQ),您可以使用Get-WmiObject

 gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue | Select Name 

或者在PowerShell远程

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

要么

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

在powershell Get-MsmqQueue中有一个通用的cmdlet命令,用于完成powershell中的任务: Get-MsmqQueue –QueueType Private | select QueueName Get-MsmqQueue –QueueType Private | select QueueName

这将返回string数组中专用队列的名称。 请注意,由get-msmqqueue cmdlet返回的types是Microsoft.Msmq.PowerShell.Commands.MessageQueue,而不是System.Messaging.MessageQueue,似乎这两种types不能相互转换。

在PowerShell中,一切都是一个对象。 您可以select使用有效丢弃对象的select命令列出某些属性。