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)
состояние