格式化PowerShell脚本的结果

时间:2018-07-10 07:19:11

标签: powershell azure

我正在尝试检索已超过特定消息计数的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
        }
    }

3 个答案:

答案 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