我正在尝试检索已超过特定消息计数的Azure服务总线队列,并且脚本到目前为止运行良好,但是当它检索值时,它将按照以下格式进行操作:
以下队列已超过限制:q1-监视端点q1-监视端点q2-监视端点q3-监视端点
我需要以更好的格式检索它们。 这是脚本,我正在使用:
$NS = Get-AzureRmServiceBusNamespace
foreach ($NS in $NS)
{
$Queue = Get-AzureRmServiceBusQueue -ResourceGroupName $NS.ResourceGroup -Namespace $NS.Name
if ($Queue.MessageCount -eq 0 )
{
"The limit has been exceeded for the following queues:" + $Queue.Name
}
}
答案 0 :(得分:2)
您应该以“更好的格式”进行解释。但是,您的主要问题在您的foreach循环中,在该循环中,您尝试遍历$NS
但将当前对象分配给$NS
。您需要选择其他变量:
$NS = Get-AzureRmServiceBusNamespace
foreach ($N in $NS)
{
$Queue = Get-AzureRmServiceBusQueue -ResourceGroupName $N.ResourceGroup -Namespace $N.Name
if ($Queue.MessageCount -eq 0 )
{
"The limit has been exceeded for the following queues:" + $Queue.Name
}
}
注意:我建议检索所有空队列并将其保存在变量中(以便以后使用):
$emptyQueue = Get-AzureRmServiceBusNamespace |
ForEach-Object {
Get-AzureRmServiceBusQueue -ResourceGroupName $_.ResourceGroup -Namespace $_.Name
} |
Where-Object MessageCount -eq 0
最后,以您想要的格式输出它:
Write-Host "The limit has been exceeded for the following queues: $($Queue.Name -join ',')"
答案 1 :(得分:2)
我目前无法访问Azure订阅以对此进行测试,但请考虑按照以下方式进行操作:
Get-AzureRmServiceBusNamespace |
ForEach-Object {
Get-AzureRmServiceBusQueue -ResourceGroupName $_.ResourceGroup -Namespace $_.Name |
ForEach-Object {
[PsCustomObject]@{
Queue = $_.Name
LimitExceeded = ($_.MessageCount -eq 0)
}
}
}
(希望)这将产生类似于以下内容的输出:
Queue LimitExceeded
------ -------------
Queue1 False
Queue2 True
Queue3 False
这不仅比原始字符串输出更整洁,而且还意味着您可以获取一些对象作为输出,可以进行进一步的操作。
答案 2 :(得分:0)
您可以尝试使用Powershell中提供的Format命令来获得更好的格式输出。
您还可以使用Format-Custom命令定义自定义格式。
Powershell中有关格式命令的参考:https://docs.microsoft.com/en-us/powershell/scripting/getting-started/cookbooks/using-format-commands-to-change-output-view?view=powershell-6