2009-04-19 10 views

Répondre

12

Un jour (2015) jour réponse à cette question.

Exemple:

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

S'applique à: Windows 8.1, Windows PowerShell 4.0, Windows Server 2012 R2

Référence: https://technet.microsoft.com/en-us/library/dn391735(v=wps.630).aspx

+1

au lieu de 'Get-MsmqQueue' vous pouvez aussi' $ newQueue = New-MsmqQueue ... 'et ensuite' $ newQueue | Set-MsmqQueueAcl ... ' – Greg

2

Il n'y a rien construit dans Powershell pour cela, mais vous pouvez utiliser les classes de framework .NET. Chargez simplement System.Messaging.dll et utilisez MessageQueue.SetPermissions() pour modifier la liste de contrôle d'accès dans la file d'attente.

26

Et voici quelques exemples PowerShell, y compris la définition des autorisations ... désolé la longueur

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

Ceci est maintenant obsolète - @Davids réponse est beaucoup mieux. –

+0

Ceci est une excellente réponse pour ceux qui exécutent Windows 7 ou pré-Windows Server 2012 R2. Sinon, @GregSansom est correct. Merci d'avoir posté cette réponse. – fourpastmidnight

2

de Windows 2012 et 8.1 ont maintenant cmdlets MSMQ. Celui pour définir les autorisations sur une file d'attente est: Set-MsmqQueueAcl

Questions connexes