如何通过Write-Host保留PowerShell中Get-Error输出的默认着色?
解决方案
要保留Get-Error的默认着色效果,同时避免将输出写入成功流,直接使用Out-Host即可——它会让对象通过PowerShell的格式化引擎直接输出到控制台,保留所有颜色和格式,且不会进入成功流。
修改后的代码示例:
function blah { try { throw 'blah' } catch { $_ | Get-Error | Out-Host } }
原理说明
- 直接执行
$_ | Get-Error时,对象会被写入成功流(流1),不符合你的需求。 Out-String | Write-Host丢失颜色,是因为Out-String序列化对象时,没有保留PowerShell格式化引擎生成的ANSI颜色转义码,Write-Host接收纯文本后无法还原着色。Out-Host绕过了成功流,直接将对象交给控制台渲染,完全保留Get-Error的默认着色(包括堆栈信息中的红色下划线标记),同时不会让输出进入后续管道或被变量捕获。
验证方式
运行$result = blah,控制台会显示带颜色的错误详情,但$result变量为空,说明输出未进入成功流;或者运行blah | Out-Null,控制台依然会显示错误信息,进一步确认输出未被管道捕获。
内容的提问来源于stack exchange,提问作者Brett
相关产品推荐
相关产品推荐

