powershell - Format-Table -GroupBy 在单行上显示数组属性

标签 powershell grouping formattable

我正在创建一个具有两个属性的自定义对象。第一个是字符串,基本上是一个键,第二个是返回数组的函数的输出。然后,我将结果通过管道传输到 Format-Table 中并按字符串属性进行分组。我想看到的是输出中单独行上的数组属性的每个元素。相反,Format-Table 将数组显示在单行上。

是否有任何方法可以格式化输出,以便数组属性的每个元素显示在单独的行上?

下面是一些说明问题的代码:

function Get-Result([string]$lookup)
{
    if ($lookup -eq "first")
    {
        return @("one", "two")
    }
    else
    {
        return @("three")
    }
}

$a = "first", "second"

$a | 
    Select-Object @{Name="LookupValue"; Expression={$_}}, `
        @{Name="Result"; Expression={Get-Result $_}} | 
    Format-Table -GroupBy LookupValue

这就是它的输出:

   LookupValue: first

LookupValue Result    
----------- ------    
first       {one, two}


   LookupValue: second

LookupValue Result
----------- ------
second      three 

我想看到的是:

   LookupValue: first

LookupValue Result    
----------- ------    
first       one  
first       two    


   LookupValue: second

LookupValue Result
----------- ------
second      three 

最佳答案

Format-cmdlet 不会创建不存在的对象。您的示例有一个包含数组的结果值。如果您不希望它成为一个数组,而是两个不同对象的一部分,那么您需要以某种方式将其拆分更改您的创建过程以创建这些多个/丢失的对象。

前者通过添加另一个处理多个“结果”的内部循环

$a | ForEach-Object{
    $element = $_
    Get-Result $element | ForEach-Object{
        $_ | Select-Object @{Name="LookupValue"; Expression={$element}},
            @{Name="Result"; Expression={$_}}
    }
} | Format-Table -GroupBy LookupValue

因此,对于 Get-Result 的每个输出,都会创建一个新对象,引用管道中由 $element 表示的当前 LookupValue .

这有点笨拙,所以我还想添加一个梯子示例,我们可以在其中更改您的创建过程

function Get-Result{
    param(
        [Parameter(
            ValueFromPipeline)]
        [string]$lookup
    )

    process{
        switch($lookup){
            "first"{
                [pscustomobject]@{LookupValue=$lookup;Result="one"},
                [pscustomobject]@{LookupValue=$lookup;Result="two"}
            }
            default{
                [pscustomobject]@{LookupValue=$lookup;Result="three"}
            }

        }
    }
}

$a = "first", "second"
$a | Get-Result | Format-Table -GroupBy LookupValue

创建一个函数,该函数接受管道输入并根据 $lookup 吐出 pscustomobjects。我在这里使用了一个开关,以防您的实际应用的条件比示例中显示的条件更多。

注意

为了使 -GroupBy 正常工作,应该对数据集进行排序。因此,如果您遇到真实数据未正确显示的问题......请先对其进行排序。

关于powershell - Format-Table -GroupBy 在单行上显示数组属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48143000/

相关文章:

php - 基于两列对多维数组中的数据进行分组

c# - 多个 linq "from"和变量可见性

r - 使用 R 中的 formattable 包更改表格内容的字体大小

r - 在 R 中使用 DT 包对列进行分组

PowerShell Get-Content 基本操作太慢

windows - 无法从站点克隆 git 存储库

powershell - powershell:拆分输出并在选择字符串后打印

r - 如何获取data.table分组中当前组的长度?

arrays - PowerShell/CLI : "Foreach" loop with multiple arrays

r - 使用 formattable(或任何其他包)对列中每隔一行的条件颜色进行格式化