Write MSMQ Messages from PowerShell

This PowerShell script sends a message to an MSMQ. I did it this particular way because NServiceBus can consume messages sent like this.

[Reflection.Assembly]::LoadWithPartialName("System.Messaging");

$queueName = '.\Private$\your.queue.name';
$queue = new-object System.Messaging.MessageQueue $queueName;
$utf8 = new-object System.Text.UTF8Encoding;

$tran = new-object System.Messaging.MessageQueueTransaction;
$tran.Begin();

$msgContent = '<?xml version="1.0" ?>
    <Messages xmlns="your-xml-namespace">
        <IWebApplicationStartupCompleting>
        </IWebApplicationStartupCompleting>
    </Messages>';
$msgBytes = $utf8.GetBytes($msgContent);

$msgStream = new-object System.IO.MemoryStream;
$msgStream.Write($msgBytes, 0, $msgBytes.Length);

$msg = new-object System.Messaging.Message;
$msg.BodyStream = $msgStream;
$queue.Send($msg, $tran);

$tran.Commit();
This entry was posted in CodeMinder, MSMQ, PowerShell, Programming. Bookmark the permalink.
  • http://www.schellack.net/jonathan/ Schellack

    I also like to set the message label, so that anyone who looks in a message queue and sees the message will know what it is without having to open it. Simply add .Label = ‘your label’; after the .BodyStream line.

  • http://www.sixgun.co.uk/ Antony Scott

    Excellent post, helped me avoid writing a console app which just dumped a simple message on the bus. Thanks.

    • Jason

      Glad to hear that, Antony – thanks for dropping me a note!