Clear-Host
[Reflection.Assembly]::LoadWithPartialName("System.Messaging")
function Create-Queue
{
param
(
[Parameter(Mandatory=$true)]
[string]$queueName,
[switch]$isPrivate = $true,
[switch]$isTransactional = $false
)
$innerQueueName = $queueName
if ($isPrivate)
{
$innerQueueName = ".\private$\"+$queueName
}
else
{
$innerQueueName = ".\"+$queueName
}
if (![System.Messaging.MessageQueue]::Exists($innerQueueName))
{
[System.Messaging.MessageQueue]::Create($innerQueueName, $isTransactional)
Write-Host "Created queue " $innerQueueName
}
return $innerQueueName
}
function Add-QueueUserPermission
{
param
(
[Parameter(Mandatory=$true)]
[string]$queuePath,
[Parameter(Mandatory=$true)]
[string]$user,
[string]$fullControl = $false
)
$q = new-object System.Messaging.MessageQueue($queuePath)
if ($fullControl -eq $true)
{
Write-Host "FullControl granted to " $user
$q.SetPermissions($User, [System.Messaging.MessageQueueAccessRights]::FullControl, [System.Messaging.AccessControlEntryType]::Allow)
}
else
{
Write-Host "Restricted access granted to " $user
$q.SetPermissions($User, [System.Messaging.MessageQueueAccessRights]::DeleteMessage, [System.Messaging.AccessControlEntryType]::Set)
$q.SetPermissions($User, [System.Messaging.MessageQueueAccessRights]::GenericWrite, [System.Messaging.AccessControlEntryType]::Allow)
$q.SetPermissions($User, [System.Messaging.MessageQueueAccessRights]::PeekMessage, [System.Messaging.AccessControlEntryType]::Allow)
$q.SetPermissions($User, [System.Messaging.MessageQueueAccessRights]::ReceiveJournalMessage, [System.Messaging.AccessControlEntryType]::Allow)
}
}
function Delete-Queue
{
param
(
[Parameter(Mandatory=$true)]
[string]$queuePath
)
[System.Messaging.MessageQueue]::Delete($queuePath)
}
function Delete-Queues
{
[System.Messaging.MessageQueue]::GetPrivateQueuesByMachine($Env:COMPUTERNAME) | ForEach-Object { Delete-Queue($_.Path) }
[System.Messaging.MessageQueue]::GetPublicQueuesByMachine($Env:COMPUTERNAME) | ForEach-Object { Delete-Queue($_.Path) }
}
#########################################################################################################################
#examples
# creates a queue that is private but not transactional
#Create-Queue -queueName "My Queue" -isPrivate $true -isTransactional $false
# grants restricted access to the queue
#Add-QueueUserPermission -queuePath ".\private$\My Queue" -user 'domain\account'
# grants full control to the queue
#Add-QueueUserPermission -queuePath ".\private$\My Queue" -user 'domain\account' -fullControl
Contains notes and lessons in working technology, especially .NET, Azure, DevOps, Agile, and Team Foundation Server.
Tuesday, April 3, 2012
Creating and Modifying MSMQ’s Using Powershell
There are a few Powershell functions that I have written and use to create and delete queues in MSMQ and to modify permissions on these queues. At the end of the script there are a few examples on how to use the functions.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.