powershell表颜色结果

时间:2014-07-04 17:02:50

标签: powershell powershell-v2.0

我有一个简单的数组,$ Results。它有两列:Task,Result。我按如下方式将其输出到表中:

$(foreach($ht in $Results){new-object PSObject -Property $ht}) | Format-Table -AutoSize -Property Task, Result

结果列将包含" PASS"或"失败"。我希望PASS为绿色,FAIL为红色。

任何人都知道一种简单的方法来实现这个目标吗?

理想情况下,只有PASS / FAIL会被着色,但如果有必要,我可以使用整个行。

1 个答案:

答案 0 :(得分:2)

虽然我想到了这一点,但我注意到有关问题的一些内容看起来类似于“powershell脚本格式 - 表格输出中的颜色词”。我把answers中的一个问到了那个问题,然后把它砍了一下,然后想出了以下内容:

# Let's Build Some Sample Data To Play With...
$Results = @()
for( $j = 1; $j -le 25; ++$j ) {
    $ans = ( "PASS", "FAIL" ) | Get-Random
    $Results += [PSCustomObject]@{ Task = "Task{0:d2}" -f $j; Result = $ans }
}

# Here's The Important Part...
filter PassFail {
    # Adapted From: https://stackoverflow.com/a/7368884/3168105
    $Pattern = "PASS|FAIL"

    $split = $_ -split $Pattern
    $found = [regex]::Matches( $_, $Pattern, 'IgnoreCase' )
    for( $i = 0; $i -lt $split.Count; ++$i ) {
        Write-Host $split[$i] -NoNewLine
        # Just in case something else pops up...
        switch( $found[$i] ) {
            "Fail" { $Color = "Red" }
            "Pass" { $Color = "Green" }
            default { $Color = "White" }
        }
        Write-Host $found[$i] -NoNewline -ForegroundColor $Color
    }

    Write-Host
}

# And here we put it together...
$Results | Out-String | PassFail

这可以用来处理更多结果,只需要在switch语句中添加额外的行,并将其他结果添加到$Pattern变量中。我不会开始说这是最好的解决方案(甚至是一个特别好的解决方案),但它的工作原理似乎相当不错。

要像上面那样使用它,使用哈希表数组,你应该能够沿着这些方向做点什么:

$(foreach($ht in $Results){new-object PSObject -Property $ht}) | Format-Table -AutoSize Task, Result | Out-String | PassFail