首页 > 解决方案 > 在 Powershell 上使用服务总线队列 InputObject 参数

问题描述

我有一个 Azure 服务总线命名空间,它有数百个队列,我需要将MaximumDeliveryCount设置为 1 而不是默认值 10。在门户上手动执行显然需要时间。所以我想通过 PowerShell 脚本来完成。

不确定 -InputObject 参数应该是什么。Microsoft 文章Set-AzServiceBusQueue说 InputObject 类型是此处给出的PSQueueAttributes PSQueueAttributes 类

我尝试输入“MaxDeliveryCount”属性但收到此错误:

Set-AzServiceBusQueue : Cannot bind parameter 'InputObject'. Cannot convert the "MaxDeliveryCount" value of type "System.String" to type 
"Microsoft.Azure.Commands.ServiceBus.Models.PSQueueAttributes".
At line:7 char:121
+ ...  $Servicebus_namespace -Name $_ -InputObject MaxDeliveryCount -WhatIf
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-AzServiceBusQueue], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Azure.Commands.ServiceBus.Commands.Queue.SetAzureRmServiceBusQueue

这是代码:

$Servicebus_queue = (Get-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace).Name

$Servicebus_queue


$Servicebus_queue.foreach{

    $Servicebus_queue = (Get-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace)

    $Servicebus_queue.MaxDeliveryCount = 1

    Set-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace -Name $_ -InputObject MaxDeliveryCount

}

我到处研究过,但找不到任何解决方案。上面的链接也路由到用于 Set-AzServiceBusQueue 命令的 AzureRM 模块。

感谢是否有人可以提供帮助。

标签: azurepowershellazureservicebusazure-servicebus-queues

解决方案


根据我的评论,您需要将队列对象(即PSQueueAttributes实例)传递Set-AzServiceBusQueueforeach.

下面的示例应该有望帮助理顺事情......

# get a queue (or an array of queues). remove the ().Name as this just extracts
# their names and we really want the whole queue object. also, pluralise the
# variable name so it doesn't collide with our loop variables
$Servicebus_queues = Get-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace

$Servicebus_queues.foreach{

    # get a reference to the current ppieline variable
    # see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell-6#_
    $Servicebus_queue = $_ 

    $Servicebus_queue.MaxDeliveryCount = 1

    # -InputObject needs to be a queue (i.e. a PSQueueAttributes instance)
    Set-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace -Name $_ -InputObject $Servicebus_queue

}

推荐阅读