如何在不使用的情况下检索本地计算机上所有私有 MSMQ 队列的名称System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")
?我正在使用 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}
}