AT work, I use MSMQ a 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 times 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 I 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 it is a transactional queue
- If journaling is enabled
- If it is an admin user queue
Hope it helps!
I currently hold the following qualifications (amongst others, I also studied Music Technology and Electronics, for my sins)
- MSc (Passed with distinctions), in Information Technology for E-Commerce
- BSc Hons (1st class) in Computer Science & Artificial Intelligence
Both of these at Sussex University UK.
Award(s)
I am lucky enough to have won a few awards for Zany Crazy code articles over the years
- Microsoft C# MVP 2016
- Codeproject MVP 2016
- Microsoft C# MVP 2015
- Codeproject MVP 2015
- Microsoft C# MVP 2014
- Codeproject MVP 2014
- Microsoft C# MVP 2013
- Codeproject MVP 2013
- Microsoft C# MVP 2012
- Codeproject MVP 2012
- Microsoft C# MVP 2011
- Codeproject MVP 2011
- Microsoft C# MVP 2010
- Codeproject MVP 2010
- Microsoft C# MVP 2009
- Codeproject MVP 2009
- Microsoft C# MVP 2008
- Codeproject MVP 2008
- And numerous codeproject awards which you can see over at my blog