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

.net 如何高效地检索所有私有MSMQ队列的名称?,.net,powershell,com,wmi,msmq,.net,Powershell,Com,Wmi,Msmq,如何在不使用System.Messaging.MessageQueue.GetPrivateQueuesByMachine(“.”)的情况下检索本地计算机上所有私有MSMQ队列的名称?我使用PowerShell,因此任何使用COM、WMI或.NET的解决方案都是可以接受的,尽管后者更可取 请注意,它有一个返回所有队列对象的解决方案。我不想要对象(当有很多队列时,它太慢而且有点片状),我只想要它们的名称 $obj = Get-WmiObject Win32_PerfRawdata_MSMQ_MSM

如何在不使用
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} 
}

请阅读此问题:。基思·希尔的回答是:谢谢,克里斯蒂安。不幸的是,PSCX cmdlet在引擎盖下使用了
GetPrivateQueuesByMachine
,我正试图避免这种情况。谢谢,@AngshumanAgarwal。它能工作,但太慢了。它不符合效率要求。