如何在本地計算機上檢索所有專用MSMQ隊列的名稱,而不使用System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")
?我使用PowerShell,因此任何使用COM,WMI或.NET的解決方案都可以接受,但後者更可取。如何檢索所有私有MSMQ隊列的名稱 - 有效嗎?
請注意,this question有一個解決方案,返回所有的隊列對象。我不想要這些物體(當隊列中有很多時,它太慢了,並且有一些小小的缺陷),我只想要他們的名字。
如何在本地計算機上檢索所有專用MSMQ隊列的名稱,而不使用System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")
?我使用PowerShell,因此任何使用COM,WMI或.NET的解決方案都可以接受,但後者更可取。如何檢索所有私有MSMQ隊列的名稱 - 有效嗎?
請注意,this question有一個解決方案,返回所有的隊列對象。我不想要這些物體(當隊列中有很多時,它太慢了,並且有一些小小的缺陷),我只想要他們的名字。
$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}
謝謝,@AngshumanAgarwal。它有效,但速度太慢。它不符合效率要求。 –
從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}
}
閱讀本SO問題:HTTP://stackoverflow.com/questions/2289464/the-number-of-messages-on-an-msmq-via-powershell。基思山答案.. –
謝謝,@克里斯蒂安。不幸的是,PSCX cmdlet使用'GetPrivateQueuesByMachine',我試圖避免。 –