powershell - 如何以编程方式设置 MSMQ 队列的所有者?

标签 powershell msmq

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

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"
  }
}

最佳答案

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

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

关于powershell - 如何以编程方式设置 MSMQ 队列的所有者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1266914/

相关文章:

c# - 如何在 C# 中使一个方法一次可供一个用户访问

msmq - 将 MSMQ 消息从一个队列路由到另一个队列

powershell - 使用 Powershell 获取 Azure AD token (jwt)

powershell - 使用 Powershell 哈希表键时如何避免错误匹配

c# - 从 PowerShell 调用时无法在 dll 中转换透明代理,但在 C# 控制台应用程序中成功

.net - MSMQ:传送到远程队列时未返回确认

c# - MSMQ 读取错误(拒绝访问)

powershell - Windows 10 PowerShell Get-WindowsCapability 和 Add-WindowsCapability 命令出错

powershell - 使用PowerShell查询AD以匹配二进制数据

msmq - 股票交易软件