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