Setting permissions on a MSMQ queue in a script Setting permissions on a MSMQ queue in a script powershell powershell

Setting permissions on a MSMQ queue in a script


And here's some example PowerShell including setting the permissions ... sorry about the length

Write-Host ""Write-Host "Examples using the .NET System.Messaging assembly to access MSMQ"Write-Host ""Write-Host "... load the .NET Messaging assembly"[Reflection.Assembly]::LoadWithPartialName("System.Messaging")Write-Host ""if ([System.Messaging.MessageQueue]::Exists(".\private$\MyQueue"))  {  [System.Messaging.MessageQueue]::Delete(".\private$\MyQueue")  Write-Host "... delete old myqueue"  }if ([System.Messaging.MessageQueue]::Exists(".\private$\BtsQueue"))  {  [System.Messaging.MessageQueue]::Delete(".\private$\BtsQueue")  Write-Host "... delete old btsqueue"  }Write-Host "... create a new queue"$q1 = [System.Messaging.MessageQueue]::Create(".\private$\MyQueue")Write-Host "... create new queue, set FullControl permissions for CORP\BIZTALK"$qb = [System.Messaging.MessageQueue]::Create(".\private$\BtsQueue")$qb.SetPermissions("CORP\BIZTALK",       [System.Messaging.MessageQueueAccessRights]::FullControl,                  [System.Messaging.AccessControlEntryType]::Set)Write-Host "... list existing queues" $pqs = [System.Messaging.MessageQueue]::GetPrivateQueuesByMachine(".")Write-Host "    Count: "$pqs.length  -ForegroundColor grayforeach($q in $pqs)  {    Write-Host "       "$q.QueueName  -ForegroundColor gray  }Write-Host "... access existing queue"$q2 = New-Object System.Messaging.MessageQueue ".\private$\MyQueue"Write-Host "... adding string Formatter and additional properties "$q2.Formatter.TargetTypeNames = ,"System.String"$q2.MessageReadPropertyFilter.ArrivedTime = $true $q2.MessageReadPropertyFilter.SentTime = $true Write-Host "... create a new High priorty message "$msg = New-Object System.Messaging.Message "TestMessage"$msg.label = "Test Msg Label"$msg.body = "Add some body to test message"$msg.priority = [System.Messaging.MessagePriority]::HighWrite-Host "... send the High message"$q2.send($msg)$msg.body = "Some more text for the test message"$msg.priority = [System.Messaging.MessagePriority]::LowWrite-Host "... send the Low message"$q2.send($msg)Write-Host "... check the queue "Write-Host "    Count: "$q2.GetAllMessages().length  -ForegroundColor grayWrite-Host "... peek at queue"$ts = New-Object TimeSpan 10000000 # 1 sec. timeout just in case MSMQ is empty$pk = $q2.Peek($ts)Write-Host "    ArrivedTime: "$pk.ArrivedTime.DateTime -ForegroundColor grayWrite-Host "    SentTime   : "$pk.SentTime.DateTime -ForegroundColor grayWrite-Host "... check the queue "Write-Host "    Count: "$q2.GetAllMessages().length -ForegroundColor grayWrite-Host "... receive from queue"$rmsg = $q2.receive($ts)Write-Host "    Body : "$rmsg.body  -ForegroundColor grayWrite-Host "    Label: "$rmsg.label -ForegroundColor grayWrite-Host "... check the queue "Write-Host "    Count: "$q2.GetAllMessages().length  -ForegroundColor grayWrite-Host "... purge the queue "$q2.Purge()Write-Host "... check the queue "Write-Host "    Count: "$q2.GetAllMessages().length  -ForegroundColor grayWrite-Host ""Write-Host "All done, but remember to delete the test queues !!"


A present (2015) day answer to this question.

Example:

New-MsmqQueue -Name "MyQueue" -QueueType PrivateGet-MsmqQueue -Name "MyQueue" -QueueType Private |   Set-MsmqQueueAcl -UserName "Everyone" -Allow FullControl

Applies To: Windows 8.1, Windows PowerShell 4.0, Windows Server 2012 R2

Reference: https://technet.microsoft.com/en-us/library/dn391735(v=wps.630).aspx


There's nothing built into powershell for this, but you can use the .NET framework classes. Just load System.Messaging.dll and use MessageQueue.SetPermissions() to change the ACL on the queue.