Ответ 1
Вы можете изменить переменную $OutputEncoding перед записью в файл. Другой вариант - не использовать > оператора, но вместо этого напрямую подключайтесь к Out-File и используйте параметр -Encoding.
Я использую Sandcaple Helpfile Builder для создания файла справки (.chm). Проект представляет собой файл .shfbproj, который представляет собой формат XML, работает с msbuild.
Я хочу автоматически обновлять текст нижнего колонтитула, который появляется в сгенерированном файле .chm. Я использую этот фрагмент:
$newFooter = "<FooterText>MyProduct v1.2.3.4</FooterText>";
get-content -Encoding ASCII $projFile.FullName |
%{$_ -replace '<FooterText>(.+)</FooterText>', $newFooter } > $TmpFile
move-item $TmpFile $projFile.FullName -force
Вывод, направляемый в $TmpFile, всегда является многобайтовой строкой. Но я не хочу этого. Как установить кодировку вывода в ASCII?
Кто-нибудь? Bueller? Кто-нибудь?
Вы можете изменить переменную $OutputEncoding перед записью в файл. Другой вариант - не использовать > оператора, но вместо этого напрямую подключайтесь к Out-File и используйте параметр -Encoding.
Оператор перенаправления >
- это "ярлык" на Out-File
. Out-File
кодировка по умолчанию - это Юникод, но вы можете передать ее в ASCII, поэтому вместо pipe Out-File
:
Get-Content -Encoding ASCII $projFile.FullName |
% { $_ -replace '<FooterText>(.+)</FooterText>', $newFooter } |
Out-File $tmpfile -Encoding ASCII
| sc filename
делает трюк (sc является псевдонимом для Set-Content)
для >> filename
использовать | ac filename
делает трюк (ac является псевдонимом для Add-Content)
Я обнаружил, что должен был использовать следующее:
write-output "First line" | out-file -encoding ascii OutputFileName
write-output "Next line" | out-file -encoding ascii -append OutputFileName
....
Изменение выходной кодировки с использованием:
$OutputEncoding = New-Object -typename System.Text.ASCIIEncoding
не работает
Просто небольшой пример использования потоков, хотя я понимаю, что это был не оригинальный вопрос.
C:\temp\ConfirmWrapper.ps1 -Force -Verbose 4>&1 6>&1 | Out-File -Encoding default -FilePath C:\temp\confirmLog.txt -Append
Выведет информацию (6) и подробные (4) потоки в поток вывода (1) и перенаправит все это в файл с кодировкой ANSI (по умолчанию).