如何有效地检索所有私有 MSMQ 队列的名称?

如何有效地检索所有私有 MSMQ 队列的名称?

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

注意这个 StackOverflow 问题有一个解决方案,可以返回所有队列对象。我不想要这些对象(当有很多队列),我只想要他们的名字。

答案1

使用 Windows Server 2012 R2,您可以消息队列 (MSMQ)安装了 Cmdlet,使用 Cmdlet获取 MsmqQueue获取名称和数量。

Get-MsmqQueue | Select QueueName, MessageCount

如果没有消息队列(MSMQ),您可以使用获取 WmiObject

gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue | Select Name

或超过powershell 远程处理

Invoke-Command -Session $sessions -ScriptBlock { Get-MsmqQueue | Select QueueName, MessageCount } 

或者

$dataRaw = Invoke-Command -Session $sessions -ScriptBlock { gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue } 
$data | Sort-Object -Property PSComputerName,Name  | 
Format-Table  DisplayName, MessagesInQueue, PSComputerName

答案2

powershell 中有一个通用的 cmdlet 命令获取 MsmqQueue,在 powershell 中完成任务:Get-MsmqQueue –QueueType Private | select QueueName

这将以字符串数组的形式返回私有队列的名称。请注意,get-msmqqueue cmdlet 返回的类型是 Microsoft.Msmq.PowerShell.Commands.MessageQueue,而不是 System.Messaging.MessageQueue,并且这两种类型似乎不能互相转换。

答案3

在 Powershell 中,一切都是对象。您可以选择使用 select 命令列出某些属性,该命令会有效地丢弃对象。

相关内容