Использование powershell для создания и настройки безопасности с помощью powershell - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь автоматизировать создание очередей MSMQ с использованием powershell

У меня нет проблем с созданием очереди, я просто не могу правильно установить разрешения

Я следил за тем, что задокументировано здесь Настройка разрешений для очереди MSMQ в сценарии

и здесь https://docs.microsoft.com/en-us/powershell/module/msmq/set-msmqqueueacl?view=win10-ps

Это моя команда для создания очереди

New-MsmqQueue -Name "ThisIsTestName" -QueueType Private

но когда я пытаюсь установить разрешения, используя эту команду

Get-MsmqQueue -Name "ThisIsATestName" -QueueType Private | Set-MsmqQueueAcl -UserName "Everyone" -Allow Peek,Receive,Send,Delete,GetProperties,GetPermissions

Я получаю эту ошибку

Set-MsmqQueueACL : Cannot convert 'System.Object[]' to the type 'System.Nullable`1[Microsoft.Msmq.PowerShell.Commands.MessageQueueAccessRights]' required by parameter 'Allow'.
Specified method is not supported.
At line:1 char:105
+ ... veryone" -Allow Peek,Receive,Send,Delete,GetProperties,GetPermissions
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Set-MsmqQueueACL], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.Msmq.PowerShell.Commands.SetMSMQQueueACLComm

Итак, я попытался удалить все разрешения и просто использовать FullAccess.

Это не дало мне ошибку, но не установило разрешения

смотря дальше, я наткнулся на этот пост:

Set-MsmqQueueACL - Разрешить - нельзя использовать список в соответствии с документами?

Итак, я обновился до следующего

$allows = [Microsoft.Msmq.PowerShell.Commands.MessageQueueAccessRights]::Peek -bor
 [Microsoft.Msmq.PowerShell.Commands.MessageQueueAccessRights]::Receive -bor
 [Microsoft.Msmq.PowerShell.Commands.MessageQueueAccessRights]::Send -bor
 [Microsoft.Msmq.PowerShell.Commands.MessageQueueAccessRights]::Delete -bor
 [Microsoft.Msmq.PowerShell.Commands.MessageQueueAccessRights]::GetPermissions -bor
 [Microsoft.Msmq.PowerShell.Commands.MessageQueueAccessRights]::GetProperties
 Get-MsmqQueue -Name "ThisIsATestName" -QueueType Private | Set-MsmqQueueAcl -UserName "Everyone" -Allow $allows  

Но я все еще получаю ту же ошибку

Я знаю, что где-то допустил глупую ошибку, но не вижу, что сделал неправильно

Попытка сделать это на компьютере с Windows 10

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Хорошо, IAW MS docs, ваша команда верна, за одним исключением, способ определения цели для получения разрешений. Может быть, попробуйте использовать «Пользователи домена»

Описание

Командлет Set-MsmqQueueACL изменяет права доступа к очередям. это Командлет возвращает обновленный объект MsmqQueueAcl. Командлет изменяет частный, публичный, журнал, системный журнал, системный тупик и системные транзакционные очереди недоставленных сообщений.

Пример 1. Изменение списков ACL очередей, указанных именем PowerShell

Get-MsmqQueue -Name "Order*" -QueueType Private | Set-MsmqQueueAcl -UserName "CONTOSO\DavidChew" -Allow Delete,Peek,Receive,Send -Deny TakeOwnership

Эта команда возвращает все частные очереди, имена которых начинаются со строкой Order с помощью командлета Get-MsmqQueue. Команда передает результаты в текущий командлет с помощью конвейера оператор. Текущий командлет изменяет ACL очередей.

Также, возможно, командлеты ожидают реального имени пользователя в соответствии с примером MS Docs. Итак, вам нужен ForEach, чтобы получить их все. У меня нет MSMQ, поэтому я не могу физически проверить.

0 голосов
/ 25 апреля 2019

Попробуйте:

$var = "PeekMessage,ReceiveMessage,DeleteMessage"
Get-MsmqQueue -Name "testqueue3" -QueueType Private | Set-MsmqQueueAcl -UserName "Everyone" -Allow $var

ИЛИ

Get-MsmqQueue -Name "testqueue3" -QueueType Private | Set-MsmqQueueAcl -UserName "Everyone" -Allow FullControl
...