Как сравнить последние два измененных файла, используя powershell Compare-Object - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть скрипт powershell для сравнения двух файлов по выбору пользователя, но я хочу сравнить последние два измененных файла без запроса ввода пользователя

    Set-ExecutionPolicy Unrestricted -force
cd\
cd .\script
Write-Host " "
Write-Host "Available Files "
Write-Host "================="
Get-ChildItem | Format-table -Property Name -HideTableHeaders
$file = 'c:\script\mismatchfound.txt'
$ref = get-content (Read-Host "Enter Reference FileName")
$dif = get-content (Read-Host "Enter Difference FileName")
Compare-Object -ReferenceObject $ref  -DifferenceObject $dif  -CaseSensitive | Format-table InputObject, SideIndicator -Autosize | out-file $file -Width 200 

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вместо write-Error вы можете использовать write-host, это будет работать во всех версиях powershell

cd\
cd .\Scripts
$File = 'c:\script\mismatchfound.txt'
$CompareFiles = Get-ChildItem -File  | Sort-Object LastWriteTime | Select-Object  -Last 2
If ($Files.count -eq 2) {
    $Ref = get-content ($CompareFiles[0])
    $Dif = get-content ($CompareFiles[1])

    Compare-Object -ReferenceObject $ref  -DifferenceObject $dif  -CaseSensitive | Format-table InputObject, SideIndicator -Autosize | out-file $file -Width 200 
} Else {
    Write-Host "File missing " -ForegroundColor White -BackgroundColor Red
}
0 голосов
/ 23 ноября 2018

Вы можете сделать это следующим образом:

$FilePath = '.\path\to\your\files'
$File = 'c:\script\mismatchfound.txt'
$CompareFiles = Get-ChildItem $FilePath -File | Sort-Object LastWriteTime | Select-Object -Last 2

If ($Files.count -eq 2) {
    $Ref = get-content $CompareFiles[0]
    $Dif = get-content $CompareFiles[1]

    Compare-Object -ReferenceObject $ref  -DifferenceObject $dif  -CaseSensitive | Format-table InputObject, SideIndicator -Autosize | out-file $file -Width 200 
}
Else{
    Write-Error '2 files not returned.'
}

При этом Get-ChildItem возвращает только файлы по пути, указанному вами в $FilePath.Затем он использует Sort-Object, чтобы отсортировать их по атрибуту LastWriteTime файлов.Затем он использует Select-Object, чтобы отфильтровать только два последних объекта, возвращенных в этой коллекции.

Затем мы используем if, чтобы проверить, что у нас есть два файла, и, если мы это сделаем, поместим их в $Ref и $Dif переменных и используйте Compare-Object для вашего кода.

Если два файла не возвращаются, мы возвращаем ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...