我想在设置新权限之前删除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相当新,所以任何帮助都会受到赞赏。
谢谢!
答案 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
}
}