我的群集中包含有效的私有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
答案 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