Compare-Object PowerShell выводит файл размером 1 КБ с 2 пустыми строками - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть сценарий 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 ]

0 голосов
/ 23 февраля 2019

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

0 голосов
/ 22 февраля 2019

Это , а не 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
}
...