2012-04-05 45 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" 

異常調用 「SetPermissions」 與 「3」 的參數(一個或多個): 「無效隊列路徑名。」 在行:30字符:19個 + $ q.SetPermissions < < < <($帳戶,[System.Messaging.MessageQueueAccessRights] :: $ accessright,
+ CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException

+0

$ account是域\用戶名格式? – 2012-04-05 08:23:00

+0

沒想到你可以改變任何遠程私人隊列。在主動節點上運行代碼並不意味着您在集羣資源的上下文中運行它。 (http://blogs.msdn.com/b/johnbreakwell/archive/2008/02/18/clustering-msmq-applications-rule-1.aspx)。公共隊列遠程管理更好。 – 2012-04-05 12:34:57

+0

我很樂意在本地運行它...在我的研究中,我閱讀了您的博客。我正在使用一個系統,MSMQ最終將逐步淘汰,以支持消息代理,但在此之前,我會陷入私密隊列。也就是說,我試圖自動部署大約60多個隊列和他們的權限。在這一點上,調查爲何腳本不能運行的時間比我剛剛改變它的時間要多得多,但自動化是當天的口頭禪。所以我的士兵... – JorgeSandoval 2012-04-05 18:54:55

回答

3

來自: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