我有一个简单的数组,$ Results。它有两列:Task,Result。我按如下方式将其输出到表中:
$(foreach($ht in $Results){new-object PSObject -Property $ht}) | Format-Table -AutoSize -Property Task, Result
结果列将包含" PASS"或"失败"。我希望PASS为绿色,FAIL为红色。
任何人都知道一种简单的方法来实现这个目标吗?
理想情况下,只有PASS / FAIL会被着色,但如果有必要,我可以使用整个行。
答案 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