Powershell - 在 Format-Table 的每一行前加上 String

Powershell - Prefix each line of Format-Table with String

我想知道是否有一种简单的方法可以为 powershell table 的每一行添加一个字符串前缀。

例如,如果我使用以下代码创建一个数组:

$Array = @()  
$Object = @{}  
$Object.STR_PARAM = "A"  
$Object.INT_PARAM = 1  
$Array += [PSCustomObject] $Object  
$Object = @{}  
$Object.STR_PARAM = "B"  
$Object.INT_PARAM = 2  
$Array += [PSCustomObject] $Object  

调用 Format-Table 给出以下输出:

$Array | Format-Table -AutoSize  

STR_PARAM INT_PARAM
--------- ---------
A                 1
B                 2

相反,我想要以下内容:

$Array | Format-Table-Custom -AutoSize -PrefixString "  "

  STR_PARAM INT_PARAM
  --------- ---------
  A                 1
  B                 2

如果可能的话,我也希望能够像这样使用 Property 参数:

$SimpleFormat = @{Expression={$_.STR_PARAM}; Label="String Param"},
                @{Expression={$_.INT_PARAM}; Label="Integer Param"};

$Array | Format-Table-Custom -Property $SimpleFormat -AutoSize -PrefixString "++"

++String Param Integer Param
++------------ -------------
++A                        1
++B                        2

如有任何帮助,我们将不胜感激。谢谢。

您可以直接使用格式表达式:

$f = @{Expression={"++" + $_.STR_PARAM}; Label="++String Param"},
     @{Expression={$_.INT_PARAM}; Label="Integer Param"};
$Array | Format-Table $f -AutoSize  

输出

++String Param Integer Param
-------------- -------------
++A                        1
++B                        2

更新以使用表达式和过滤器

Filter Format-Table-Custom
{
    Param
    (
        [string]
        $PrefixString,
        [object]
        $Property
    )
    end {
        $rows = $input | Format-Table $property -AutoSize | Out-String
        $lines = $rows.Split("`n")
        foreach ($line in $lines) {
            if ($line.Trim().Length -gt 0) {
                $PrefixString + $line
            }
        }
    }
}

$f = @{Expression={"--" + $_.STR_PARAM}; Label="--String Param"},
     @{Expression={$_.INT_PARAM}; Label="Integer Param"};
$Array | Format-Table-Custom -Property $f -PrefixString "++"

输出

++--String Param Integer Param
++-------------- -------------
++--A                        1
++--B                        2