删除MSMQ队列权限



在设置新权限之前,我想删除MSMQ队列上的所有权限,这将通过Octopus进行部署。这样我们就可以确保不存在任何遗留权限,并确保这些权限是相同的。

$QueueName = "MyQueue"
$QueuePermissions = Get-MsmqQueue -Name $QueueName | Get-MsmqQueueACL
$QueueUsers = $QueuePermissions.AccountName | Get-Unique
foreach ($User in $QueueUsers)
  if ($User -like 'MyDomain*'){
    #Something like
    $QueueName | Set-MsmqQueueACL -UserName $User -Remove
  }

不幸的是,我需要创建一个CSV权限列表,以便删除Set MsmqQueueACL。我怎么能拿到这个?

我是PowerShell的新手,所以任何帮助都将不胜感激。

谢谢!

首先,删除队列并重新创建是更可靠的方法。

我想你有一个理由要求你不要删除它们。这是一种我认为最适合你的方法。

使用System.Messing.MessageQueue 中的MessageQueue.ResetPermissions方法

powershell的代码示例:

$QueueName = ".private$MyQueue"
Add-Type -AssemblyName System.Messaging
$Q = [System.Messaging.MessageQueue]($QueueName)
$Q.ResetPermissions()

注意:此方法将队列权限恢复为默认权限,只有创建者才能完全访问队列。我的powershell使用了一个创建这些队列的自动化帐户,因此从这一点上来说,它会带走很多好处。但是,根据我过去的经验,如果所有队列权限都被打乱了,并且你没有一个完全控制队列的帐户,你可能最终不得不从存储中删除物理队列文件,然后重新启动MSMQ服务来清理它。因此,我敦促您保持权限的一致性,这样您以后对队列的操作就可以毫无问题地执行。

我已经创建了一个似乎有效的解决方案,如上所述,我不是PowerShell专家,但它可能会在未来帮助其他人:

$Queue= "MyQueueName"
#remove old permissions
$QueuePermissions = Get-MsmqQueue -Name $Queue | Get-MsmqQueueACL
$QueueUsers = $QueuePermissions.AccountName | Get-Unique
foreach ($User in $QueueUsers)
{
    Write-Output "Permissions found for user: $User"
    $tst = $QueuePermissions | where {$_.AccountName -eq $User}
    $tst = $tst | Select -ExpandProperty Right
    foreach ($Permission in $tst)    
    {
        Write-Output "Removing permissions: $Permission"
        $thisQueue | Set-MsmqQueueAcl -UserName $User -Remove $Permission | Out-Null
    }
}

最新更新