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

问题描述 投票:1回答:2

我试图使用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机器上执行此操作

powershell message-queue msmq
2个回答
0
投票

试试:

$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

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。

它也可能是cmdlet根据MS Docs示例需要真实的用户名。那么,你最终需要一个ForEach来获取它们。我没有MSMQ,所以无法进行物理验证。

© www.soinside.com 2019 - 2024. All rights reserved.