Ошибка записи дает странные символы при перенаправлении в файл в ядре 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, что вызывает такое поведение, и есть ли способ это исправить?

1 ответ

Такое поведение, по-видимому, вызвано новым режимом просмотра ошибок, который можно изменить с помощью переменной предпочтения .

По умолчанию для $ErrorViewявляется ConciseViewкоторый выводит escape-коды 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: это тест
+ Информация о категории: NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId: Microsoft.PowerShell.Commands.WriteErrorException

Связанный вопрос:Захват буквальной строки на stderr в powershell

Проблема с GitHub

Другие вопросы по тегам