【问题标题】:How can I programatically set the owner of a MSMQ queue?如何以编程方式设置 MSMQ 队列的所有者?
【发布时间】:2010-11-19 00:14:29
【问题描述】:

我有一个 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"
  }
}

【问题讨论】:

    标签: powershell msmq


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        如果默认情况下您无权访问 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
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-09-24
          • 2021-11-10
          • 2010-11-06
          • 2018-10-14
          • 2011-07-30
          • 2012-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多