Назад | Перейти на главную страницу

Как получить имена всех частных очередей MSMQ - эффективно?

Как я могу получить имена всех частных очередей MSMQ на локальном компьютере, без использования System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")? Я использую PowerShell, поэтому любое решение с использованием COM, WMI или .NET приемлемо, хотя последнее предпочтительнее.

Обратите внимание, что этот вопрос StackOverflow имеет решение, которое возвращает все объекты очереди. Мне не нужны предметы (они слишком медленные и немного рассыпаются, когда есть лоты очередей), мне просто нужны их имена.

В Windows Server 2012 R2 у вас есть Очередь сообщений (MSMQ) Командлеты установлены, используйте командлет Get-MsmqQueue получить имя и сосчитать.

Get-MsmqQueue | Select QueueName, MessageCount

Без очереди сообщений (MSMQ) вы можете использовать Get-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

В PowerShell доступна общая команда командлета. Get-MsmqQueue, чтобы выполнить задачу в PowerShell: Get-MsmqQueue –QueueType Private | select QueueName

Это вернет имена частных очередей в строковом массиве. Имейте в виду, что командлет get-msmqqueue возвращает тип Microsoft.Msmq.PowerShell.Commands.MessageQueue, а не System.Messaging.MessageQueue, и кажется, что эти два типа не могут быть преобразованы друг в друга.

В Powershell все является объектом. Вы можете выбрать список определенных свойств, используя команду select, которая эффективно отбрасывает объекты.