我有一个PowerShell脚本,可以为我创建一些私人队列。但是,队列默认由运行安装脚本的人拥有。我宁愿让他们拥有一个团体(即 - 管理员或其他人)。有谁知道怎么做?
foreach($strQueue in $strQueues) {
if (![System.Messaging.MessageQueue]::Exists($strQueue)) {
$q = [System.Messaging.MessageQueue]::Create($strQueue)
$q.SetPermissions($queueUser, [System.Messaging.MessageQueueAccessRights]::FullControl, [System.Messaging.AccessControlEntryType]::Set)
$q.SetPermissions("BUILTIN\Administrators", [System.Messaging.MessageQueueAccessRights]::TakeQueueOwnership, [System.Messaging.AccessControlEntryType]::Set)
Write-Host "... created $strQueue and set FullControl permissions for $queueUser"
}
}
答案 0 :(得分:3)
我知道这是一个古老的问题,并且已经得到了回答,但我今天在这方面已经挣扎了很长时间,并且必须发布我的解决方案,以免其他人痛苦。
如果您默认无法访问MSMQ,则需要像@Noon Silk建议的那样以模拟用户身份运行命令。
此代码允许您以不同的用户身份创建和分配队列的权限
$Username = "Eric"
$Password = "MyPassword"
$securePass = ConvertTo-SecureString $Password -AsPlainText -Force
$credential = New-Object Management.Automation.PSCredential($Username, $securePass)
foreach($strQueue in $strQueues) {
if (![System.Messaging.MessageQueue]::Exists($strQueue)) {
$script =
{
$q = [System.Messaging.MessageQueue]::Create($strQueue)
$q.SetPermissions($queueUser, [System.Messaging.MessageQueueAccessRights]::FullControl, [System.Messaging.AccessControlEntryType]::Set)
$q.SetPermissions("BUILTIN\Administrators", [System.Messaging.MessageQueueAccessRights]::TakeQueueOwnership, [System.Messaging.AccessControlEntryType]::Set)
Write-Host "... created $strQueue and set FullControl permissions for $queueUser"
}
Invoke-Command -Credential $credential -ScriptBlock $script
}
}
答案 1 :(得分:2)
我认为取得所有权只能从本机代码(使用msmq的c api)完成。所以这里没有权力。但是有一个c+ sample here。
答案 2 :(得分:1)
您可以在创建相关管理员帐户之前尝试模拟他们......?