Kann jemand geben Sie mir einige Hinweise, wie Berechtigungen für MSMQ-Warteschlangen in Skript setzen, vorzugsweise Powershell, aber ich würde verwenden VBscriptFestlegen von Berechtigungen auf einer MSMQ-Warteschlange in einem Skript
Antwort
Ein Geschenk (2015) Tag Antwort auf diese Frage.
Beispiel:
New-MsmqQueue -Name "MyQueue" -QueueType Private
Get-MsmqQueue -Name "MyQueue" -QueueType Private |
Set-MsmqQueueAcl -UserName "Everyone" -Allow FullControl
Betrifft: Windows 8.1, Windows Powershell 4.0, Windows Server 2012 R2
Referenz: https://technet.microsoft.com/en-us/library/dn391735(v=wps.630).aspx
Es gibt nichts in Powershell für diese gebaut ist, aber Sie können die .NET-Framework-Klassen verwenden. Laden Sie einfach System.Messaging.dll und verwenden Sie MessageQueue.SetPermissions(), um die ACL in der Warteschlange zu ändern.
Und hier einige Beispiele einschließlich Powershell die Berechtigungen einstellen ... traurig über die Länge
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 !!"
Dies ist nun obsolet - @Davids Antwort viel besser ist. –
Dies ist eine großartige Antwort für Benutzer von Windows 7 oder Windows Server 2012 R2. Ansonsten ist @GregSansom korrekt. Vielen Dank, dass Sie diese Antwort gepostet haben. – fourpastmidnight
Windows-2012 und 8.1 jetzt haben MSMQ Cmdlets. Der eine, um die Berechtigungen für eine Warteschlange zu setzen ist: Set-MsmqQueueAcl
anstelle der 'Get-MsmqQueue' könnten Sie auch' $ newQueue = New-MsmqQueue ... 'und dann' $ newQueue | Set-MsmqQueueAcl ... ' – Greg