Новичок в скриптинге. Мне нужна помощь в создании сценария powershell, который будет просматривать файл журнала и искать ключевое слово, например. неудачно/неудачно, и присутствует ключевое слово, отправьте электронное письмо с последними 50 строками.
У меня есть части сценария, работающие, но у меня возникли проблемы с их сборкой.
Глядя на лог и распечатывая строку
$PATH = "C:\tmp\test.log"
Get-Content $PATH -Tail 50 | Where-Object { $_.Contains("fail") }
Электронная почта на SMTP-сервер отсортирована и работает
$From = "[email protected]"
$To = "[email protected]"
$Subject = "Failed notification"
$Body = "This is what I want to say"
$SMTPServer = "smtp.foobar.com"
$SMTPPort = "25"
Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort
Я знаю, что мне нужен оператор IF, чтобы сравнить содержимое и установить, если оно истинно, отправить электронное письмо.
Кто-нибудь может мне помочь?
Да, это правильно.
Пока вы учитесь, вероятно, проще быть явным, если вам нужно напомнить себе, что что-то вернется.
[string] $PATH = "C:\tmp\test.log"
[string[]] $failedRows = Get-Content $PATH -Tail 50 | Where-Object { $_.Contains("fail") }
# Email to SMTP server sorted and working
[string] $From = "[email protected]"
[string] $To = "[email protected]"
[string] $Subject = "Failed notification"
[string] $Body = "This is what I want to say"
[string] $SMTPServer = "smtp.foobar.com"
[string] $SMTPPort = "25"
if ( $failedRows -and $failedRows.Length -gt 0) {
Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort
}
Помните, что powershell — это слабо типизированный. Редактор, такой как vscode с расширение powershell, поможет, а также вы сможете увидеть предложения по улучшению вашего кода.
$PATH = "C:\tmp\test.log"
$failedRows = Get-Content $PATH -Tail 50 | Where-Object { $_.Contains("fail") }
# Email to SMTP server sorted and working
$From = "[email protected]"
$To = "[email protected]"
$Subject = "Failed notification"
$Body = "This is what I want to say"
$SMTPServer = "smtp.foobar.com"
$SMTPPort = "25"
if ( $failedRows -and $failedRows.Length -gt 0) {
Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort
}
Быстрый вопрос: ваш текущий код ищет слово «сбой» только в последних 50 строках файла и игнорирует остальные. Так ты хочешь?