【问题标题】:How to retrieve names of all private MSMQ queues - efficiently?如何有效地检索所有私有 MSMQ 队列的名称?
【发布时间】:2012-06-18 15:08:12
【问题描述】:

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

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

【问题讨论】:

  • 阅读这个 SO 问题:stackoverflow.com/questions/2289464/…。基思山答案..
  • 谢谢,@Christian。不幸的是,PSCX cmdlet 在我试图避免的情况下使用 GetPrivateQueuesByMachine

标签: .net powershell com wmi msmq


【解决方案1】:

从 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} 
}

【讨论】:

    【解决方案2】:
    $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} 
    

    【讨论】:

    • 谢谢,@AngshumanAgarwal。它有效,但它太慢了。它不满足效率要求。
    猜你喜欢
    • 2011-03-20
    • 2014-12-01
    • 2014-05-06
    • 2011-03-24
    • 2011-09-23
    • 2021-01-19
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多