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

Я хочу иметь возможность сравнить содержимое двух текстовых файлов и посмотреть, совпадает ли содержимое этих файлов. Если содержимое двух файлов отличается, мне нужен этот скрипт powershell, чтобы отправить мне электронное письмо со списком отличий от двух файлов. Вот мой код:

$fromaddress = "noreply@xy.com"
$toaddress = "me@xy.com "
$Subject = "Comparing 2 text files"
$login = "abc"
$password = "12345" | Convertto-SecureString -AsPlainText -Force
$smtpserver = "smtp.office.com" 
$message = new-object System.Net.Mail.MailMessage
$message.From = $fromaddress
$message.To.Add($toaddress)
$message.IsBodyHtml = $True
$message.Subject = $Subject
$attach = new-object Net.Mail.Attachment($attachment)
$message.Attachments.Add($attach)
$message.body = $body
$message.Priority = [System.Net.Mail.MailPriority]::High
$smtp = new-object Net.Mail.SmtpClient($smtpserver, 587)
$smtp.EnableSsl = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($login, $password);


IF (Compare-Object -ReferenceObject (Get-Content $dir\file1.txt) -DifferenceObject (Get-Content $dir\file2.txt)){
        Write-Output "The files are different "
        $smtp.Send($message);
    } 
    Else {
        Write-Output "The files are not different" 
    }

Я просматривал различные онлайн-ресурсы, в которых предлагалось использовать командлет Compare-Object, но в моей ситуации он не работает. Проблема с моим кодом в том, что он возвращает все из файла file1. Любой, кто знает, почему это не работает для меня?

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Вы почти правы с вашим первоначальным сценарием. Вам просто нужно добавить -IncludeEqual

Смотри ниже. Текстовые файлы 1 и 2 просто "Привет!" Текстовый файл 3 "привет там2"

$1 = gc 'H:\Skype Migrations\file1.txt'
$2 = gc 'H:\Skype Migrations\file2.txt'
$3 = gc 'H:\Skype Migrations\file3.txt'

IF ( ( Compare-Object -ReferenceObject $1 -DifferenceObject $3 -IncludeEqual ).sideindicator -ne "==" )
   { Write-Output "The files are different " } 
Else 
   { Write-Output "The files are not different" }

Отредактировано, чтобы продемонстрировать, как использовать IncludeEqual

0 голосов
/ 03 мая 2018

Сканирует 2 текстовых файла на наличие различий и передает их в третий файл

$File1 = "C:\Scripts\Txt1.txt"

$File2 = "C:\Scripts\Txt2.txt"

$Location = "C:\Scripts\Txt3.txt"

compare-object (get-content $File1) (get-content $File2) | format-list | Out-File $Location

Выход: enter image description here

0 голосов
/ 03 мая 2018

Для сравнения двух файлов и определения их идентичности используйте хэш файла:

$hash1 = Get-FileHash $dir\file1.txt
$hash2 = Get-FileHash $dir\file2.txt
if($hash1 -eq $hash2){
    'They are the same'
}else{
    'They are NOT the same
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...