Сравнить две строки с несколькими строками

#powershell #compare

#powershell #Сравнить

Вопрос:

У меня есть две строки. Если строки равны, то ничего не нужно делать, запускается оператор else. Это работает только для однострочного формата. но если в строках несколько строк, как показано ниже, то это не сработает. Где я делаю неправильно?

Например $myvar :

log.txt :

15732: 19 / Январь /2019 15:40:06.969 Сообщение ОБ ОШИБКЕ -outofmemory

log_2.txt :

15732: 19 / Январь /2019 15:40:06.969 Сообщение ОБ ОШИБКЕ -неустранимая ошибка 01 (122)

Вот мой скрипт:

 $myvar

if (!($myvar)) {
    Write-Host "No exception info to report" -BackgroundColor Green
} else {
    $InputString = $myvar
    $StringToMatch = Get-Content C:ftp_filereportdump.txt
    if ($InputString -eq $StringToMatch) {
        Write-Host "it will not be sent mail because same error message $($InputString)" -BackgroundColor Green
    } else {
        Write-Host "it will be sent mail" -BackgroundColor Cyan
        Send-Mail blah blah..
        #Export myvar variable again
        "$myvar" | Out-File -FilePath C:ftp_filereportdump.txt
    }
}
  

Комментарии:

1. Используйте Get-Content с -Raw переключателем, чтобы получить содержимое файла в виде одной строки. Без этого он возвращает массив строк (содержимое разделено на новые строки). Кроме того, что находится в вашей $StringToMatch строке. Если это то, что должно быть найдено где-то в содержимом файла, вам будет лучше использовать регулярное выражение типа if ($StringToMatch -match [Regex]::Escape($InputString)) .

2. $StringToMatch строка такая же, как $myvar

3. Боюсь, я не согласен с этим комментарием.. Означает ли это, что $myvar должно быть полностью равно $StringToMatch ? В этом случае вы можете использовать -eq оператор сравнения, но вам все равно нужно будет использовать Get-Content -Raw

4. Как вы сказали, я это протестировал. Но безуспешно.

5. Примеры строк для $myvar — это всего лишь одна строка. Где там несколько строк?