如何在MSMQ群集队列上设置权限?

时间:2012-04-05 01:15:00

标签: powershell msmq cluster-computing

我的群集中包含有效的私有MSMQ 3.0队列。我尝试以编程方式设置权限,但似乎无法通过队列上的System.Messaging进行连接。使用本地队列时(以及使用。\ nomenclature作为本地队列),下面的代码工作正常。如何以编程方式设置群集队列的权限?

从活动节点执行的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 char:19 + $ q.SetPermissions<<<< ($帐户,[System.Messaging.MessageQueueAccessRights] :: $ accessright,
    + CategoryInfo:NotSpecified:(:) [],MethodInvocationException     + FullyQualifiedErrorId:DotNetMethodException

1 个答案:

答案 0 :(得分:3)

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

在使用messageQueue之前,必须设置群集网络名称环境变量。

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

将群集网络名称添加到脚本顶部应解决问题

链接到我提供的完整(简单 - 但适用于简单创建和分配权限)脚本作为另一个问题的答案。 https://stackoverflow.com/a/11268755/761599