Powershell msmq: use MSMQ PS7 ? (under Windows 11 22H2) · Issue #18824 · PowerShell/PowerShell · GitHub
Запись в MSMQ из Powershell (и просмотр в диспетчере серверов)
Перейти к содержимому
1519 Администратор
(последний отредактировано )
Сначала убедитесь, что MMSQ установлен, а затем вручную создайте очередь с помощью графического пользовательского интерфейса MMC (консоли управления Microsoft) диспетчера серверов. Возможно, в следующем блоге я продемонстрирую создание самой очереди в Powershell.
ПРИМЕЧАНИЕ. MSMQ может хранить только сообщения размером до 4 МБ!
Выберите, хотите ли вы, чтобы ваша очередь была транзакционной или нет (для помощи в принятии этого решения см. эту ссылку: http://msdn. microsoft.com/en-us/library/ms704006%28v=vs.85%29.aspx
Вот пример кода. Я создал две функции, одну из которых поддерживает транзакционные очереди и одну нетранзакционную очередь.Обратите внимание: если бы я хотел сделать подпрограммы более гибкими, я мог бы разрешить передачу типа кодировки в качестве параметра; приведенный ниже код предполагает кодировку UTF8.
<пред> [Reflection.Assembly]::LoadWithPartialName("System.Messaging") функция WriteMessageToMSMQTrans($queueName, $message, $label) { $queue = новый объект System.Messaging.MessageQueue $queueName $utf8 = новый объект System.Text.UTF8Encoding $tran = новый объект System.Messaging.MessageQueueTransaction $tran.Начало() $msgBytes = $utf8.GetBytes($сообщение) $msgStream = новый объект System.IO.MemoryStream $msgStream.Write($msgBytes, 0, $msgBytes.Length) $msg = новый объект System.Messaging.Message $msg.BodyStream = $msgStream если ($label -ne $null) { $msg.Label = $метка } $queue.Send($msg, $тран) $tran. Commit() Write-Host "Сообщение написано" } функция WriteMessageToMSMQNonTrans($queueName, $message, $label) { $queue = новый объект System.Messaging.MessageQueue $queueName $utf8 = новый объект System.Text.UTF8Encoding $msgBytes = $utf8.GetBytes($сообщение) $msgStream = новый объект System.IO.MemoryStream $msgStream.Write($msgBytes, 0, $msgBytes.Length) $msg = новый объект System.Messaging.Message $msg.BodyStream = $msgStream если ($label -ne $null) { $msg.Label = $метка } $queue.Send($msg) Write-Host "Сообщение написано" } #------------------------- # Протестируйте вышеуказанные функции #------------------------- cls #clear screen (мусор из предыдущих запусков) $queueName = ".\Private$\nealtest" $message = "Это мое первое тестовое сообщение" WriteMessageToMSMQNonTrans $queueName $message $null $message = "Это мое второе тестовое сообщение" WriteMessageToMSMQNonTrans $queueName $message "MyLabel" Write-Host "Завершено" пред>
Теперь мы можем просмотреть два сообщения, записанные в очередь.
Щелкните правой кнопкой мыши «Свойства» в любом сообщении. Ниже я показываю вкладку «Общие» с датой написания сообщения, затем тег «Body», который показывает шестнадцатеричный код и текст сообщения.
Без категории
окон — Получите удаленный объект MSMQ с помощью «Get-MsmqQueue» в Powershell 4
Задавать вопрос
спросил
Изменено
3 года, 7 месяцев назад
Просмотрено
5к раз
Я пытаюсь вернуть объект MessageQueue, чтобы добавить к нему сообщения с помощью командлета Powershell 4.0:
Get-MsmqQueue
Если я локально нахожусь на сервере с очередью сообщений, я могу запустить следующее, и будет возвращен объект типа MessageQueue
:
Get-MsmqQueue -Name "myQueueName"
Теперь, если я нахожусь на другом сервере, где должен работать сценарий, я не могу заставить возвращаемый объект MessageQueue. Я пробовал множество различных комбинаций одинарных и двойных кавычек, разных флагов и т. д.
Get-MsmqQueue -Name 'myServerName.myCompany.com\private$\myQueueName' Get-MsmqQueue -Name 'myServerName\private$\myQueueName' Get-MsmqQueue -Name 'FormatName:DIRECT=OS:myServerName.myCompany.com\private$\myQueueName' Get-MsmqQueue -Name 'FormatName:DIRECT=OS:myServerName\private$\myQueueName' Get-MsmqQueue -Name "FormatName:DIRECT=OS:myServerName\private$\myQueueName" Get-MsmqQueue -Name 'FormatName:DIRECT=OS:myServerName\private$\myQueueName' -QueueType Private
Кому-нибудь удалось это сделать? Я был бы очень признателен за помощь. Заранее спасибо!
- windows
- powershell
- сценарии
- powershell-4.0
3
Я обнаружил, что это работает:
[System.Reflection.Assembly]::LoadWithPartialName("System.Messaging")
$queuePath = "FormatName:DIRECT=OS:myServerName\private$\myQueueName"
$queue = новый объект System.