如何有效地检索所有专用 MSMQ 队列的名称



如何在不使用System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")的情况下检索本地计算机上所有专用 MSMQ 队列的名称?我使用的是PowerShell,因此任何使用COM,WMI或.NET的解决方案都是可以接受的,尽管后者更可取。

请注意,此问题有一个返回所有队列对象的解决方案。我不想要对象(当有很多队列时,它太慢了,有点不稳定),我只想要它们的名字

$obj = Get-WmiObject Win32_PerfRawdata_MSMQ_MSMQQueue ##will return an Object[] array
$obj[0].name ## will return the 1st Queue Name

此外,您可以这样做以查找此对象的更多方法/属性 -

$obj | Get-Member

要仅列出私有 Q,您可以使用这个 -

Get-WmiObject Win32_PerfRawdata_MSMQ_MSMQQueue |
    ?{$_.Name -match "private"} |
        %{$_.Name} 

从Windows Server 2012和Win8开始,PS有一个Get-MsmqQueue命令。 在我的测试中,它比 get-wmiobject 方法更快。

Measure-Command {
  $list = Get-MsmqQueue -QueueType Private | % {$_.QueueName}
}
Measure-Command {
  $list = Get-WmiObject Win32_PerfRawdata_MSMQ_MSMQQueue | ?{$_.Name -match "private"} | %{$_.Name} 
}

最新更新