После долгих исследований мы обнаружили, что в прикрепляемом текстовом файле были некоторые переводы строк, которые не были обработаны возвратом каретки (т.е. \n вместо \r \n).
Удаление этих автономных переводчиков решило проблему.
Если это будет полезно для других, вот скрипт для удаления недопустимых символов в файле:
Файл: RemoveInvalidLineBreaks.ps1
if ($args.length -gt 0 -AND
$args[0] -ne $NULL -AND
$args[0] -ne "")
{
$fn = $args[0]
(Get-Content $fn) | Set-Content $fn
}
else
{
write-error "No filename supplied"
}
Пример использования:
(если вызывается из пакетного файла Windows)
powershell -ExecutionPolicy RemoteSigned ./RemoveInvalidLineBreaks.ps1 D:\TEST\myLogFile.txt
Сценарий работает, потому что Get-Content
при использовании без параметра -Raw
(который доступен только для PS3 и далее) считывает файл по одной строке за раз, обрабатывая \r\n
и \n
как символы конца строки; но при обратной записи в Set-Content
только с использованием соглашения об окончании строки Windows \r\n
; при этом все перерывы заменяются.