2009-04-19 7 views

Respuesta

12

Un presente (2015) día responde a esta pregunta.

Ejemplo:

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

aplica a: Windows 8.1, Windows PowerShell 4.0, Windows Server 2012 R2

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

+1

en lugar del 'Get-MsmqQueue' también podría' $ newQueue = New-MsmqQueue ... 'y luego' $ newQueue | Set-MsmqQueueAcl ... ' – Greg

2

No hay nada integrado en PowerShell para esto, pero puede usar las clases .NET framework. Simplemente cargue System.Messaging.dll y use MessageQueue.SetPermissions() para cambiar la ACL en la cola.

26

Y aquí está un cierto ejemplo PowerShell incluyendo el establecimiento de los permisos ... lo de la longitud

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 gray 
foreach($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]::High 

Write-Host "... send the High message" 
$q2.send($msg) 

$msg.body = "Some more text for the test message" 
$msg.priority = [System.Messaging.MessagePriority]::Low 

Write-Host "... send the Low message" 
$q2.send($msg) 

Write-Host "... check the queue " 
Write-Host " Count: "$q2.GetAllMessages().length -ForegroundColor gray 

Write-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 gray 
Write-Host " SentTime : "$pk.SentTime.DateTime -ForegroundColor gray 

Write-Host "... check the queue " 
Write-Host " Count: "$q2.GetAllMessages().length -ForegroundColor gray 

Write-Host "... receive from queue" 
$rmsg = $q2.receive($ts) 
Write-Host " Body : "$rmsg.body -ForegroundColor gray 
Write-Host " Label: "$rmsg.label -ForegroundColor gray 

Write-Host "... check the queue " 
Write-Host " Count: "$q2.GetAllMessages().length -ForegroundColor gray 

Write-Host "... purge the queue " 
$q2.Purge() 

Write-Host "... check the queue " 
Write-Host " Count: "$q2.GetAllMessages().length -ForegroundColor gray 

Write-Host "" 
Write-Host "All done, but remember to delete the test queues !!" 
+2

Esto es ahora obsoleto - @Davids respuesta es mucho mejor. –

+0

Esta es una gran respuesta para aquellos que están ejecutando Windows 7 o pre-Windows Server 2012 R2. De lo contrario, @GregSansom es correcto. Gracias por publicar esta respuesta. – fourpastmidnight

2

de Windows 2012 y 8.1 ahora tienen cmdlets MSMQ. El que establece los permisos en una cola es: Set-MsmqQueueAcl

Cuestiones relacionadas