代码之家  ›  专栏  ›  技术社区  ›  Erik

如何通过编程设置MSMQ队列的所有者?

  •  2
  • Erik  · 技术社区  · 16 年前

    我有一个powershell脚本,可以为我创建一些私有队列。但是,队列默认为运行安装脚本的人所有。我更喜欢将它们归一个团体所有(即管理员或类似的团体)。有人知道怎么做吗?

    foreach($strQueue in $strQueues) {
      if (![System.Messaging.MessageQueue]::Exists($strQueue)) {
        $q = [System.Messaging.MessageQueue]::Create($strQueue)
        $q.SetPermissions($queueUser, [System.Messaging.MessageQueueAccessRights]::FullControl, [System.Messaging.AccessControlEntryType]::Set)
        $q.SetPermissions("BUILTIN\Administrators", [System.Messaging.MessageQueueAccessRights]::TakeQueueOwnership, [System.Messaging.AccessControlEntryType]::Set)
        Write-Host "... created $strQueue and set FullControl permissions for $queueUser"
      }
    }
    
    3 回复  |  直到 16 年前
        1
  •  3
  •   ShaneC    11 年前

    我知道这是一个古老的问题,并且已经得到了回答,但我今天在这个问题上挣扎了太久,不得不发布我的解决方案,以减轻其他人的痛苦。

    如果默认情况下您没有访问MSMQ的权限,那么您需要按照@Noon-Silk的建议以模拟用户的身份运行这些命令。

    此代码将允许您以不同的用户身份创建和分配队列的权限

    $Username = "Eric"
    $Password = "MyPassword"
    
    $securePass = ConvertTo-SecureString $Password -AsPlainText -Force
    $credential = New-Object Management.Automation.PSCredential($Username, $securePass)
    
    foreach($strQueue in $strQueues) {
      if (![System.Messaging.MessageQueue]::Exists($strQueue)) {
        $script = 
            {
                $q = [System.Messaging.MessageQueue]::Create($strQueue)
                $q.SetPermissions($queueUser, [System.Messaging.MessageQueueAccessRights]::FullControl, [System.Messaging.AccessControlEntryType]::Set)
                $q.SetPermissions("BUILTIN\Administrators", [System.Messaging.MessageQueueAccessRights]::TakeQueueOwnership, [System.Messaging.AccessControlEntryType]::Set)
                Write-Host "... created $strQueue and set FullControl permissions for $queueUser"
            }
    
        Invoke-Command -Credential $credential -ScriptBlock $script
      }
    }
    
        2
  •  2
  •   Igal Serban    16 年前

    我认为只有通过本机代码(使用msmq的c api)才能获得所有权。所以这里没有电地狱。但是有一个 c+ sample here

        3
  •  1
  •   Noon Silk    16 年前

    您可以在创建相关管理员帐户之前尝试模拟它们?

    推荐文章