Как я могу получить имена всех частных очередей 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, которая эффективно отбрасывает объекты.