2012-04-05 21 views
1

私は機能しているプラ​​イベートMSMQ 3.0キューを持つクラスタを持っています。プログラムでアクセス許可を設定しようとしていますが、キュー上でSystem.Messaging経由で接続できないようです。以下のコードは、ローカルキューを扱う場合(そしてローカルキューの場合は\ nomenclatureを使用する場合)にうまく動作します。プログラムによってクラスター化されたキューのアクセス許可を設定する方法アクティブノードから実行MSMQクラスターキューのアクセス許可を設定する方法?

Powershellのコード

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" 

例外 "3" 引数(複数可)で "SetPermissions" を呼び出す: "無効なキューパス名"ラインで :30文字:19 + $ q.SetPermissions < < < <($アカウント、[System.Messaging.MessageQueueAccessRights] :: $のaccessright、
+ CategoryInfo:NotSpecified:(:) []、MethodInvocationException + FullyQualifiedErrorId:

+0

$ accountはドメイン\ユーザー名形式ですか? –

+0

リモートのプライベートキューで何かを変更できるとは思われませんでした。アクティブノードでコードを実行しても、クラスタ化されたリソースのコンテキストで実行されているわけではありません。 (http://blogs.msdn.com/b/johnbreakwell/archive/2008/02/18/clustering-msmq-applications-rule-1.aspx)。パブリックキューは、リモート管理の方がはるかに優れています。 –

+0

私はそれをローカルで実行して嬉しいです...私はこれに関する私の研究中にあなたのブログを読んでいます。私は、MSMQが最終的にメッセージブローカーに有利になる段階で廃止されるシステムで作業していますが、それまでは私的なキューが残っています。つまり、私は約60以上のキューとそれらのアクセス許可の展開を自動化しようとしています。現時点では、なぜ私はそれを変更したばかりのスクリプトが動作しないのかを調べるのにもっと時間が掛かっていましたが、自動化はその日のマントラです。だから私は兵士をしています。 – JorgeSandoval

答えて

3

からDotNetMethodException:あなたがメッセージキューを使用する前に、クラスタネットワーク名の環境変数を設定する必要がhttp://winterdom.com/2011/10/using-powershell-with-clustered-msmq

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

スクリプトの先頭にクラスタネットワーク名を追加すると、問題が解決するはずです

完全な(単純な作成とパーマの簡単な作成に使用できます)スクリプトへのリンク別の質問への回答として提供しました。 https://stackoverflow.com/a/11268755/761599

関連する問題