我正在尝试使用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计算机上执行此操作
答案 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文档,您的命令是正确的,除了一个例外,定义了目标接收权限的方式。也许尝试使用“域用户”
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,因此无法进行物理验证。