Powershell 删除MSMQ队列权限

Powershell 删除MSMQ队列权限,powershell,msmq,Powershell,Msmq,我想在设置新权限之前删除MSMQ队列上的所有权限,这将通过Octopus部署。 这样我们就可以确保不存在任何遗留权限,并且确保这些权限相同 $QueueName = "MyQueue" $QueuePermissions = Get-MsmqQueue -Name $QueueName | Get-MsmqQueueACL $QueueUsers = $QueuePermissions.AccountName | Get-Unique foreach ($User in $QueueUsers)

我想在设置新权限之前删除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的新手,希望您能提供帮助


谢谢

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

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

使用来自的方法

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

您可以将多个用户传递给
-UserName
参数。所以,您只需要创建一个带有用户名的csv。你会发现很多这样做的例子。CSV应该是输入还是输出?您是否需要创建CSV列表,列出必须删除的内容,或者是否需要创建已删除(或将要删除)权限的报告?我的最终目标是删除当前存在的所有权限。我不知道我可以传递多个用户名。我是否可以传递Get-MsmqQueueACL的结果以删除权限?我无法导入System.Messaging命名空间,因为.Net中存在限制队列名称长度的缺陷。我们正在使用Octopus Deploy在每次部署时设置权限,我们不希望删除队列并像在生产中那样重新创建它们。这可能意味着邮件将丢失。很抱歉,您的解决方案应该可以工作,请小心为您的部署帐户保留最低权限,以便它可以恢复其他权限。此外,性能降低似乎只适用于公共队列,我的队列都是私有的(谢天谢地)。需要设置$thisQueue变量:$thisQueue=Get-MsmqQueue-Name$QueueName我建议不要删除所有权限,因为如果删除所有权限,可能会导致MSMQ无法使用队列。