在 Powershell 上使用服务总线队列 InputObject 参数
Using Service Bus Queue InputObject Parameter on Powershell
我有一个 Azure 服务总线命名空间,它有数百个队列,我需要将 MaximumDeliveryCount 设置为 1 而不是默认值 10。在门户网站上手动执行此操作将显然需要时间。所以我想通过 PowerShell 脚本来完成。
不确定 -InputObject 参数应该是什么。微软文章 Set-AzServiceBusQueue says that the InputObject Type is of PSQueueAttributes given here PSQueueAttributes Class
我尝试输入 '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 模块。
如果有人能提供帮助,我们将不胜感激。
根据我的研究,如果你想使用参数InputObject
,你必须提供PSQueueAttributes作为它的值。
例如:
$Servicebus_queue = (Get-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace)
$Servicebus_queue.MaxDeliveryCount = 1
Set-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace -Name $_ -InputObject $Servicebus_queue
详情请参考document。
更新
如果你想用PowerShell更新Service Bus Queue,请参考以下脚本
Connect-AzAccount
$ResourceGroupName=" "
$Namespace=" "
$queues = Get-AzServiceBusQueue -ResourceGroupName $ResourceGroupName -Namespace $Namespace
foreach($queue in $queues){
$queue.MaxDeliveryCount = 1
Set-AzServiceBusQueue -ResourceGroup $ResourceGroupName -NamespaceName $Namespace -QueueName $queue.Name -QueueObj $queue
}
根据我的评论,您需要将一个队列对象(即 PSQueueAttributes
实例)传递给 Set-AzServiceBusQueue
,但是您的变量赋值和你的 foreach
.
下面的示例有望帮助解决问题...
# 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
}
我有一个 Azure 服务总线命名空间,它有数百个队列,我需要将 MaximumDeliveryCount 设置为 1 而不是默认值 10。在门户网站上手动执行此操作将显然需要时间。所以我想通过 PowerShell 脚本来完成。
不确定 -InputObject 参数应该是什么。微软文章 Set-AzServiceBusQueue says that the InputObject Type is of PSQueueAttributes given here PSQueueAttributes Class
我尝试输入 '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 模块。
如果有人能提供帮助,我们将不胜感激。
根据我的研究,如果你想使用参数InputObject
,你必须提供PSQueueAttributes作为它的值。
例如:
$Servicebus_queue = (Get-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace)
$Servicebus_queue.MaxDeliveryCount = 1
Set-AzServiceBusQueue -ResourceGroupName $Resourcegroup_name -Namespace $Servicebus_namespace -Name $_ -InputObject $Servicebus_queue
详情请参考document。
更新
如果你想用PowerShell更新Service Bus Queue,请参考以下脚本
Connect-AzAccount
$ResourceGroupName=" "
$Namespace=" "
$queues = Get-AzServiceBusQueue -ResourceGroupName $ResourceGroupName -Namespace $Namespace
foreach($queue in $queues){
$queue.MaxDeliveryCount = 1
Set-AzServiceBusQueue -ResourceGroup $ResourceGroupName -NamespaceName $Namespace -QueueName $queue.Name -QueueObj $queue
}
根据我的评论,您需要将一个队列对象(即 PSQueueAttributes
实例)传递给 Set-AzServiceBusQueue
,但是您的变量赋值和你的 foreach
.
下面的示例有望帮助解决问题...
# 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
}