使用Powershell通过Powershell创建创建和设置安全性

时间:2019-04-25 15:54:07

标签: powershell message-queue msmq

我正在尝试使用Powershell自动创建MSMQ队列

我创建队列没有问题,只是似乎无法正确设置权限

我一直在关注这里记录的内容 Setting permissions on a MSMQ queue in a script

在这里 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 - Allow - can't use list as per docs?

所以我更新到以下内容

$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 :(得分:0)

尝试:

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

OR

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

答案 1 :(得分:0)

好吧,IAW MS文档,您的命令是正确的,除了一个例外,定义了目标接收权限的方式。也许尝试使用“域用户”

  

Description

     

Set-MsmqQueueACL cmdlet修改队列的访问权限。这个   cmdlet返回更新的MsmqQueueAcl对象。该cmdlet修改   私人,公共,期刊,系统期刊,系统死信以及   系统事务性死信队列。

     

示例1:修改名称为PowerShell的队列的ACL

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

此命令获取所有以名称开头的专用队列   通过使用Get-MsmqQueue cmdlet与字符串Order一起使用。命令   使用管道将结果传递到当前cmdlet   操作员。当前的cmdlet修改队列的ACL。

此外,根据MS Docs示例,cmdlet可能期望真实的用户名。因此,您最终需要ForEach才能全部使用它们。我没有MSMQ,因此无法进行物理验证。