我如何才能检索名称本地计算机上的所有私有 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 命令列出某些属性,该命令会有效地丢弃对象。