Powershell:如何为Service Bus队列创建/管理共享访问策略

时间:2015-07-08 13:52:54

标签: azure azure-powershell azure-servicebus-queues azure-queues

能够使用以下代码

创建队列
$queuename = "samplequeue"
$CurrentNamespace = Get-AzureSBNamespace -Name "mynamespace"
$NamespaceManager = [Microsoft.ServiceBus.NamespaceManager]::CreateFromConnectionString($CurrentNamespace.ConnectionString);
$QueueDescription = New-Object -TypeName Microsoft.ServiceBus.Messaging.QueueDescription -ArgumentList $queuename
$NamespaceManager.CreateQueue($QueueDescription);

我正在寻找PowerShell cmdlet来创建/管理ServiceBus队列的共享访问策略。

能够从管理门户添加它。

enter image description here

还试过下面的cmdlet,

New-AzureSBAuthorizationRule -Name "readwritepolicy" -Namespace "mynamespace"-Permission $("Send") -EntityName "notsure" -EntityType "Queue"

给出了以下错误,

New-AzureSBAuthorizationRule : Object reference not set to an instance of an object.
At line:1 char:1
+ New-AzureSBAuthorizationRule -Name "readwritepolicy" -Namespace "mynamespace" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzureSBAuthorizationRule], NullReferenceException
    + FullyQualifiedErrorId : Microsoft.WindowsAzure.Commands.ServiceBus.NewAzureSBAuthorizationRuleCommand

我做错了吗?什么是EntityName?

2 个答案:

答案 0 :(得分:0)

我知道这有点旧了,但它出现在我的搜索中并使我成功,所以我认为值得分享

我通过添加到下面的答案来实现它,因为我在使用新的AzureSBAuthorisationRule cmdlet时遇到错误

$NamespaceManager.UpdateTopic($topic)

但是我正在添加一个主题,所以在这个例子中它将是

$NamespaceManager.UpdateQueue($queuename)

答案 1 :(得分:-1)

EntityName 参数是您要为其添加自动调整规则的队列的名称。

但是,当您尝试将规则添加到队列时,我不确定为什么 New-AzureSBAuthorizationRule cmdlet会失败,但其他人报告的问题相同。作为解决方法,您可以尝试:

$queuename = "yourqueue"
$CurrentNamespace = Get-AzureSBNamespace -Name "yournamespace"
$NamespaceManager = [Microsoft.ServiceBus.NamespaceManager]::CreateFromConnectionString($CurrentNamespace.ConnectionString);

$newkey = [Microsoft.ServiceBus.Messaging.SharedAccessAuthorizationRule]::GenerateRandomKey()
[Microsoft.ServiceBus.Messaging.AccessRights[]] $accessRights  = [Microsoft.ServiceBus.Messaging.AccessRights]::Send
$AuthorizationRule = [Microsoft.ServiceBus.Messaging.SharedAccessAuthorizationRule]::new("myRule",$newkey, $accessRights)

$queue = $NamespaceManager.GetQueue($queuename )
$queue.Authorization.Add($AuthorizationRule)