Compare-Object PowerShell выводит файл размером 1 КБ с 2 пустыми строками

У меня есть сценарий PowerShell, который сравнивает вчерашний и сегодняшний файл, чтобы предоставить изменения, которые можно в дальнейшем загрузить в таблицу Oracle для отчетности. Моя проблема в том, что в выходные дни, когда в исходной системе не происходит изменений, в сегодняшнем файле нет новых строк по сравнению со вчерашним (file1 и file2 идентичны). Compare-Object по-прежнему создает выходной файл, который имеет только символ новой строки. Я искал этот форум для любого, у кого могла быть подобная проблема, и ниже - то, что я попробовал до сих пор.

Исходный код:

Compare-Object -ReferenceObject $(Get-Content $filenew) -DifferenceObject $(Get-Content $fileold) |
    Where-Object SideIndicator -eq '<=' |
    %{$_.Inputobject + $_.SideIndicator} |
    ft -Auto |
    Out-File $file_diff -Width 5000

Я попытался добавить ниже в мой код, и это все еще не помогает

$filen = Get-Item "D:\DevelopTest\DEV\Test\File2.txt"
$fileo = Get-Item "D:\DevelopTest\DEV\Test\File1.txt"

Compare-Object -ReferenceObject $(Get-Content $filenew) -DifferenceObject $(Get-Content $fileold) |
    Where-Object SideIndicator -eq '<=' |
    %{$_.Inputobject + $_.SideIndicator} |
    ft -Auto |
    Out-File $file_diff -Width 5000

(gc "D:\DevelopTest\DEV\Test\File.txt") |
    ? {$_.Trim() -ne "" } |
    Set-Content $file_diff

Что можно добавить, чтобы определить, что в файле нет данных (только пустые / новые символы строки), поэтому я могу предотвратить загрузку пустых строк в таблицу. Любая помощь приветствуется, спасибо заранее.

2 ответа

Решение

Это не Compare-Object который производит пустые / нулевые строки.

$filenew = Get-Item "D:\DevelopTest\DEV\Test\File2.txt"
$fileold = Get-Item "D:\DevelopTest\DEV\Test\File1.txt"

$Differences = Compare-Object -Ref (Get-Content $filenew) -Diff (Get-Content $fileold)

if ($Differences.Count){
    $Differences | ForEach-Object{
        $_.Inputobject + $_.SideIndicator
    } | Out-File $file_diff -Width 5000
}

Как указывалось в ответе @LotPings выше, объект сравнения не был причиной для дополнительного символа новой строки, это был скрипт ниже, который преобразовывал файл из Little Endian в UTF8. Исходный код работал после перемещения сценария преобразования кодировки в If ((Get-Content $file_diff) -ne $Null) состояние

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