#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
— это всего лишь одна строка. Где там несколько строк?