Depois de muita investigação, descobrimos que havia alguns feeds de linha no arquivo de texto que estavam sendo anexados e que não foram processados por retornos de carro (ou seja, \ n em vez de \ r \ n).
A remoção desses feeds de linha autônomos resolveu o problema.
Caso seja útil para outras pessoas, aqui está o script para remover caracteres inválidos em um arquivo:
Arquivo: 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"
}
Exemplo de uso:
(se chamado do arquivo de lote do windows)
powershell -ExecutionPolicy RemoteSigned ./RemoveInvalidLineBreaks.ps1 D:\TEST\myLogFile.txt
O script funciona porque Get-Content
, quando usado sem o parâmetro -Raw
(que está disponível somente a partir do PS3) lê o arquivo uma linha por vez, tratando tanto \r\n
quanto \n
como fim da linha personagens; mas ao escrever de volta em Set-Content
usando apenas a convenção de fim do Windows \r\n
line; assim todas as quebras são substituídas.