2016-04-18 2 views
1

Я хочу удалить все разрешения в очереди MSMQ до того, как мы установим новые разрешения, это будет развернуто через Octopus. Это так, что мы можем быть уверены, что никаких устаревших разрешений не существует и убедитесь, что разрешения будут одинаковыми.Удалить разрешения для очереди MSMQ

$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, поэтому любая помощь будет оценена.

Спасибо!

+0

Вы можете передать несколько пользователей в '-UserName' параметра , Итак, вам нужно только создать csv с именами пользователей. Вы найдете множество примеров для этого. –

+0

Предполагается, что CSV должен быть введен или выводиться? IOW вам нужно создать листинг CSV, который должен быть удален, или вам нужно создать отчет о разрешениях, которые были удалены (или будут удалены)? –

+0

Моя конечная цель - удалить все разрешения, существующие в настоящее время. Я не знал, что могу передать несколько имен пользователей. Могу ли я просто передать результат Get-MsmqQueueACL, чтобы удалить разрешения? –

ответ

1

Прежде всего, удаление очередей и воссоздание - более надежный подход.

Я предполагаю, что у вас есть причина, требующая от вас не удалять их. Вот такой подход, который, как мне кажется, подходит вам лучше всего.

Использование MessageQueue.ResetPermissions метода из System.Messing.MessageQueue

Пример кода для PowerShell:

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

Это разрешение очереди метод положить обратно по умолчанию, где только создатель имеет полный доступ к очереди. Моя PowerShell использует учетную запись автоматизации, которая создавала эти очереди, поэтому с этой точки зрения это уберет штраф. Тем не менее, в моем прошлом опыте, если все права на очереди запущены, и у вас нет учетной записи, которая полностью контролирует очередь, вам может потребоваться удалить файл физической очереди из хранилища и перезапустить службу MSMQ, чтобы очистить ее вверх. Таким образом, я настоятельно призываю вас поддерживать согласованность разрешения, чтобы ваши последующие операции в очереди могли выполняться без проблем.

+0

Я не могу импортировать пространство имен System.Messaging, так как есть дефект в .Net, который ограничивает длину имени очереди. Мы используем Octopus Deploy для установки разрешений в каждом развертывании, и мы не хотим удалять очереди и воссоздавать их, как в процессе производства, это может означать, что сообщения будут потеряны. –

+0

Извините, что ваше решение должно работать, просто соблюдайте минимальные разрешения для своей учетной записи развертывания, чтобы вернуть другие разрешения. Кроме того, [имя очереди длиннее 64 символов немного снижает производительность] (https://msdn.microsoft.com/en-us/library/ms706083 (v = vs.85) .aspx) –

+0

Я не знал, что производительность было медленнее, интересно! –

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

Необходимо установить переменную $ thisQueue: $ thisQueue = Get-MsmqQueue -Name $ QueueName Я бы посоветовал не удалять все разрешения, поскольку он может отображать очередь, недоступную для MSMQ, если все разрешения удалены. –

 Смежные вопросы

  • Нет связанных вопросов^_^