qualcuno può darmi alcune indicazioni su come impostare le autorizzazioni sulle code MSMQ nello script, preferibilmente PowerShell, ma mi piacerebbe utilizzare VBScriptImpostazione delle autorizzazioni su una coda MSMQ in uno script
risposta
Un presente (2015) risposta giorno a questa domanda.
Esempio:
New-MsmqQueue -Name "MyQueue" -QueueType Private
Get-MsmqQueue -Name "MyQueue" -QueueType Private |
Set-MsmqQueueAcl -UserName "Everyone" -Allow FullControl
applica a: Windows 8.1, Windows PowerShell 4.0, Windows Server 2012 R2
Riferimento: https://technet.microsoft.com/en-us/library/dn391735(v=wps.630).aspx
Non c'è niente di costruito in PowerShell per questo, ma puoi usare le classi del framework .NET. Basta caricare System.Messaging.dll e utilizzare MessageQueue.SetPermissions() per modificare l'ACL sulla coda.
Ed ecco qualche esempio PowerShell compresa l'impostazione delle autorizzazioni ... dispiace per la lunghezza
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 !!"
Questo è ormai obsoleta - @Davids risposta è molto meglio. –
Questa è un'ottima risposta per coloro che eseguono Windows 7 o pre-Windows Server 2012 R2. Altrimenti, @GregSansom è corretto. Grazie per aver postato questa risposta. – fourpastmidnight
di Windows 2012 e 8.1 ora hanno cmdlet MSMQ. Quello per impostare i permessi su una coda è: Set-MsmqQueueAcl
invece di 'Get-MsmqQueue' potresti anche' $ newQueue = New-MsmqQueue ... 'e poi' $ newQueue | Set-MsmqQueueAcl ... ' – Greg