删除MSMQ队列权限

时间:2016-04-18 10:42:21

标签: powershell 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
  }

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

我对PowerShell相当新,所以任何帮助都会受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

使用MessageQueue.ResetPermissions

中的System.Messing.MessageQueue方法

powershell的代码示例:

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

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

答案 1 :(得分:0)

我已经创建了一个似乎有效的解决方案,如上所述,我不是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
    }
}