如何在不使用System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")
的情况下检索本地计算机上所有私有MSMQ队列的名称?我正在使用PowerShell,因此任何使用COM,WMI或.NET的解决方案都是可以接受的,尽管后者更可取。
请注意this question有一个返回所有队列对象的解决方案。我不想要这些对象(当有很多的队列时,它太慢了,有点松懈),我只想要他们的名字。
答案 0 :(得分:5)
$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,您可以使用此< - / strong>
Get-WmiObject Win32_PerfRawdata_MSMQ_MSMQQueue |
?{$_.Name -match "private"} |
%{$_.Name}
答案 1 :(得分:2)
从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}
}