2012-04-05 14 views
1

Ich habe einen Cluster mit funktionierenden privaten MSMQ 3.0-Warteschlangen. Ich versuche, die Berechtigungen programmgesteuert festzulegen, aber scheint nicht über System.Messaging in den Warteschlangen zu verbinden. Der folgende Code funktioniert problemlos, wenn Sie mit lokalen Warteschlangen arbeiten (und. \ Nomenclature für die lokale Warteschlange verwenden). Wie programmgesteuert legen Sie die Berechtigungen für die gruppierten Warteschlangen fest?So legen Sie Berechtigungen für MSMQ Cluster-Warteschlangen fest?

Powershell-Code aus dem aktiven Knoten ausgeführt

function set-msmqpermission ([string] $queuepath,[string] $account, [string] $accessright) 
{ 
    if (!([System.Messaging.MessageQueue]::Exists($queuepath))){ 
    throw "$queuepath could not be found." 
} 
$q=New-Object System.Messaging.MessageQueue($queuepath) 
$q.SetPermissions($account,[System.Messaging.MessageQueueAccessRights]::$accessright,    
    [System.Messaging.AccessControlEntryType]::Set) 
} 
set-msmqpermission "clusternetworkname\private$\qa1ack" "UserAccount" "FullControl" 

Exception "SetPermissions" durch "3" Argument (e) Aufrufen "Ungültige Warteschlangenpfadname" In Zeile: 30 Zeichen: 19 + q.SetPermissions $ < < < < ($ Konto, [System.Messaging.MessageQueueAccessRights] :: $ access,
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException

+0

$ Konto ist in der Domäne \ Benutzername Format? –

+0

Dachte nicht, dass Sie in einer privaten Remote-Warteschlange etwas ändern könnten. Wenn Sie den Code auf dem aktiven Knoten ausführen, bedeutet dies nicht, dass Sie ihn im Kontext der Clusterressource ausführen. (http://blogs.msdn.com/b/johnbreakwell/archive/2008/02/18/clustering-msm-applications-rule-1.aspx). Öffentliche Warteschlangen sind für die Remoteverwaltung viel besser geeignet. –

+0

Ich würde mich freuen, es lokal zu betreiben ... Ich habe Ihren Blog während meiner Forschung darüber gelesen. Ich arbeite mit einem System, in dem MSMQ zugunsten des Nachrichtenbrokers allmählich ausläuft, aber bis dahin bin ich mit den privaten Warteschlangen fest. Das heißt, ich versuche, die Bereitstellung von über 60 Warteschlangen und deren Berechtigungen zu automatisieren. An diesem Punkt gab es viel mehr Zeit zu untersuchen, warum das Skript nicht funktioniert, als wenn ich es gerade geändert hätte, aber Automatisierung ist das Mantra des Tages. Also ich Soldat auf ... – JorgeSandoval

Antwort

3

Von:. http://winterdom.com/2011/10/using-powershell-with-clustered-msmq

Sie haben die Cluster-Netzwerknamen Umgebungsvariable zu setzen, bevor Message mit

$env:_CLUSTER_NETWORK_NAME_ = 'myclusterMSMQ' 
[System.Messaging.MessageQueue]::Create('.\Private$\MyQueue') 

Das Hinzufügen des Clusternetzwerknamens zum Anfang des Skripts sollte das Problem lösen

Link zu dem vollständigen Skript (vereinfacht - aber funktioniert für die einfache Erstellung und Zuweisung von Dauerwellen) ich als Antwort auf eine andere Frage zur Verfügung gestellt. https://stackoverflow.com/a/11268755/761599