首页 > 解决方案 > 重定向到 powershell 核心中的文件时,写入错误会给出奇怪的字符

问题描述

您好,我在 powershell 7.1 和 7.2 预览版中有以下测试代码。

Write-Output "Lalala" 1> C:\Temp\test.txt 
Write-Error "This is a test" 2>&1 >> C:\Temp\test.txt 
Write-Warning "Test Testt" 3>&1 >> C:\Temp\test.txt 
Write-Information "Information Information" 6>&1 >> C:\Temp\test.txt 

这会在文件中产生以下输出。写入错误输出显示奇怪的字符。

拉拉拉

[91mWrite-Error: [91m这是一个测试[0m

测试测试

资讯资讯

当我在 powershell 5 中执行相同操作时,结果与我预期的一样:

拉拉拉

C:\Users\MoonChild\Documents\huh.ps1 : 这是一个测试 + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,huh.ps1

测试测试

资讯资讯

powershell 核心是否有任何问题导致这种行为,有没有办法解决它?

标签: powershellfileredirectoutputwrite-error

解决方案


这种行为似乎是由新的错误视图模式引起的,可以通过$ErrorView首选项变量进行更改。

默认值$ErrorViewConciseView将 ANSI 转义码输出到文件(这是您所看到的,▯[91m并且▯[0m- 矩形是不可打印的 ESC 字符)。转义码仅对控制台输出有意义,它们对输出进行着色。重定向到文件时它们没有多大意义,所以这对我来说似乎是一个错误。

要获得 PS 5 行为,请设置$ErrorView = 'NormalView'

$ErrorView = 'NormalView'
Write-Error "This is a test" 2>&1 >> C:\Temp\test.txt

输出:

写入错误“这是一个测试” 2>&1 > C:\Temp\test.txt :这是一个测试
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId:Microsoft.PowerShell.Commands.WriteErrorException

相关问题: 在 powershell 中的 stderr 上捕获文字字符串

GitHub问题


推荐阅读