2012-06-15 42 views
4

如何在本地計算機上檢索所有專用MSMQ隊列的名稱,而不使用System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")?我使用PowerShell,因此任何使用COM,WMI或.NET的解決方案都可以接受,但後者更可取。如何檢索所有私有MSMQ隊列的名稱 - 有效嗎?

請注意,this question有一個解決方案,返回所有的隊列對象。我不想要這些物體(當隊列中有很多時,它太慢了,並且有一些小小的缺陷),我只想要他們的名字。

+0

閱讀本SO問題:HTTP://stackoverflow.com/questions/2289464/the-number-of-messages-on-an-msmq-via-powershell。基思山答案.. –

+0

謝謝,@克里斯蒂安。不幸的是,PSCX cmdlet使用'GetPrivateQueuesByMachine',我試圖避免。 –

回答

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 

只列出私人QS,你可以使用這個 -

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

謝謝,@AngshumanAgarwal。它有效,但速度太慢。它不符合效率要求。 –

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