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.