Como recuperar nomes de todas as filas privadas do MSMQ - com eficiência?

1

Como posso recuperar os nomes de todas as filas privadas do MSMQ na máquina local, sem usar System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".") ? Estou usando o PowerShell para que qualquer solução usando COM, WMI ou .NET seja aceitável, embora a última seja preferível.

Observe que essa pergunta do StackOverflow tem uma solução que retorna todos os objetos da fila . Eu não quero os objetos (é muito lento e um pouco flakey quando há lotes de filas), eu só quero seus nomes.

    
por Damian Powell 15.06.2012 / 16:27

3 respostas

2

Com o Windows Server 2012 R2, você tem o Enfileiramento de Mensagens (MSMQ) Cmdlets instalados, use o Cmdlet Get-MsmqQueue para obtenha nome e conte.

Get-MsmqQueue | Select QueueName, MessageCount

Sem o serviço de enfileiramento de mensagens (MSMQ), você pode usar o Get-WmiObject

gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue | Select Name

Ou powershell remoting :

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

ou

$dataRaw = Invoke-Command -Session $sessions -ScriptBlock { gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue } 
$data | Sort-Object -Property PSComputerName,Name  | 
Format-Table  DisplayName, MessagesInQueue, PSComputerName
    
por 11.01.2015 / 13:42
1

Há um comando de cmdlet genérico disponível no powershell Get-MsmqQueue , para realizar a tarefa no powershell: Get-MsmqQueue –QueueType Private | select QueueName

Isso retornará os nomes das filas particulares na matriz de cadeias. Esteja ciente de que o tipo retornado pelo cmdlet get-msmqqueue é Microsoft.Msmq.PowerShell.Commands.MessageQueue, não System.Messaging.MessageQueue e parece que esses dois tipos não podem ser convertidos entre si.

    
por 18.04.2016 / 16:28
-1

Em Powershell tudo é um objeto. Você pode escolher listar certas propriedades usando o comando select que efetivamente descarta os objetos.

    
por 15.06.2012 / 16:43