2016-03-22 3 views
1

Я полный новичок, когда дело доходит до PowerShell, но изучал лучший способ проверить очередь сообщений, которую я установил (MSMQ). До сих пор я был в состоянии выполнить следующие действия в Powershell, чтобы получить все мои очереди, чтобы увидеть, что присутствует:MSMQ Сообщение

gwmi -class Win32_PerfRawData_MSMQ_MSMQQueue -computerName . | 
ft -prop Name, MessagesInQueue 

Это возвращает список очередей MSMQ У меня есть доступен. Теперь я хочу отправить сообщение только в одну из возвращенных очередей для тестирования соединения. Моя очередь называется:

<server>\private$\<queuename> 

Я попытался, используя следующие, но не имели никакой удачи:

$myqueue = '.\Private$\portalemailqueue' 
$MyQueue.Send("<<Message>>", "test1") 

Method invocation failed because [System.String] does not contain a method named 'Send'. 
At line:3 char:1 
+ $MyQueue.Send("<<Message>>", "test1") 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
+ FullyQualifiedErrorId : MethodNotFound 

Я не могу за жизнь мне понять, как это сделать. У кого-нибудь есть хорошие ресурсы или код для этого?

ответ

3

Как говорится в ошибке, ваш объект $MyQueue - это просто строка, ничего особенного.

Вы можете использовать пространство имен .NET System.Messaging работать с экземплярами очереди сообщений:

Add-Type -AssemblyName System.Messaging 
$MyQueuePath = '.\Private$\portalemailqueue' 
$MyQueue = if([System.Messaging.MessageQueue]::Exists($MyQueuePath)) { 
    # Open existing queue 
    New-Object System.Messaging.MessageQueue $MyQueuePath 
} else { 
    # Or create it 
    [System.Messaging.MessageQueue]::Create($MyQueuePath) 
} 
# Now you can call $MyQueue.Send() 
Смежные вопросы