AT work I use MSMQ I fair bit, and I also use NServiceBus a fair bit of late, which thankfully takes care of creating all the queues needed. But, for those time when you really need to make a bunch of queues, it can be a time consuming exercise, so I decided to see if my new found PowerShell skills could automate this process (remember I am still learning, so this may not be the best/most current way, in fact know for Windows 8.1/Windows Server there is a later more groovy API. But for now this is what I came up with
[CmdletBinding()] Param( [Parameter(Mandatory=$True,Position=1)] [string]$queueName, [Parameter(Mandatory=$True,Position=2)] [bool]$isTransactional, [Parameter(Mandatory=$True,Position=3)] [bool]$isJournalEnabled, [Parameter(Mandatory=$True,Position=4)] [string]$userName, [Parameter(Mandatory=$True,Position=5)] [bool]$isAdminUser ) [Reflection.Assembly]::LoadWithPartialName("System.Messaging") function printUsage() { Write-Host "Usage is CreateQueue.ps1 -queueName SomeQueuName -isTransactional $true -isJournalEnabled $true -userName mclocal\barbers -isAdminUser $true" } try { $fullQueueName = ".\private$\" + $queueName If ([System.Messaging.MessageQueue]::Exists($fullQueueName)) { Write-Host($fullQueueName + " queue already exists") } else { $newQ = [System.Messaging.MessageQueue]::Create($fullQueueName, $isTransactional) if ($isJournalEnabled) { $newQ.UseJournalQueue = $True } if ($isAdminUser) { Write-Host("ADMIN") $newQ.SetPermissions($userName, [System.Messaging.MessageQueueAccessRights]::FullControl, [System.Messaging.AccessControlEntryType]::Allow) } else { Write-Host("NOT ADMIN") $newQ.SetPermissions($userName, [System.Messaging.MessageQueueAccessRights]::GenericWrite, [System.Messaging.AccessControlEntryType]::Allow) $newQ.SetPermissions($userName, [System.Messaging.MessageQueueAccessRights]::PeekMessage, [System.Messaging.AccessControlEntryType]::Allow) $newQ.SetPermissions($userName, [System.Messaging.MessageQueueAccessRights]::ReceiveJournalMessage, [System.Messaging.AccessControlEntryType]::Allow) } } } catch [Exception] { Write-Host $_.Exception.ToString() printUsage }
This will allow you to create a private queue of your choice of name, where you can also pick the following
- Whether its a transactional queue
- If journaling is enabled
- If its an admin user queue
Hope it helps