Searching for words in a file and sending notifications with Powershell
PowerShell, komut satırı kabuğu, betik dili ve yapılandırma yönetimi çerçevesinden oluşan platformlar arası bir görev otomasyonu çözümüdür. PowerShell, Windows, Linux ve macOS üzerinde çalışır. Powershell çok güçlü bir otomasyon olduğu için, işlerinizi kolaylaştırabilirsiniz.
Bu betik bilgisayar üzerindeki saati günlük çeker ve belirlediğiniz text içindeki anahtar kelimeye bakar. Belirlediğiniz anahtar kelime geçiyor ise size mail veya slack üzerinden bildirim gönderir.
Aşağıdaki resimde görüldüğü gibi günlük olarak bir yedek ve bu yedeğin log dosyası gelmektedir. Eğer yedekte bir hata varsa log dosyası içinde success yerine error yazmaktadır. İşte biz aşağıda error kelime geçiyorsa bildirim alma kısmını inceleyeceğiz.

Bu tür işlemler yapmadan, powershell dosyasının içeriğini okuyun ve çok dikkatli olun.
# Bu betik günlük olarak belirlediğiniz dosya içindeki anahtar kelimeye bakıp hata aldığınızda mail veya slack üzerinden bildirim gönderir.
# Aşağıdaki alanları doldurmanız gerekmektedir.
# $log kısmına klasör veya UNC path giriniz. (Dosya adı günlük değiştiği için tarih değişkeni ile birleştirme işlemi yapılmıştır.)
# content1 anahtar kelime "successfully completed" kelimesi geçiyor ise bildirim göndermez.
# content2 anahtar kelime "completed with 1 error" kelimesi geçiyor ise bildirim gönderir.
# Slack ve E-Maıl bilgi kısımlarını doldurunuz.
#<p> ve text kısımlarına hata mesajlarını yazınız.
$tarih = Get-Date -Format "yyyy_MM_dd"
$log = "\\ip_adresss\path\HBS_"+$tarih+"_1800.log"
$content = Get-Content -Path $log
if($content){
$content1 = $content -match "successfully completed"
if($content1){
$logdata = 1
}else{
$content2 = $content -match "completed with 1 error"
if($content2){
$logdata = 4
}else{
$logdata = 4
}
}
}else{
$logdata = 4
}
$body1 = ConvertTo-Html -PreContent @"
<div>
<p>Oracle RMAN yedekleri gelmedi..</p>
</div>
"@
if($logdata -gt 2){
# SlackWebhook URL bilgilerini giriniz.
$uriSlack = "https://hooks.slack.com/services/T04L2K57F61323EE/B07J486EDDU7J/dk111MMoeMOrrs"
$body = ConvertTo-Json @{
pretext = "Database Backup"
text = "Oracle RMAN yedekleri gelmedi."
color = "#142954"
}
try {
Invoke-RestMethod -uri $uriSlack -Method Post -body $body -ContentType 'application/json' | Out-Null
} catch {
Write-Error (Get-Date) ": Update to Slack went wrong..."
Invoke-WebRequest -Method Post -Uri $Url -Body $body
}
#e-posta kullanıcı bilgilerini giriniz.
$UserName = "x@gmail.com"
$Password = "tfzd syf1y ha3cu dlpu" # (Gmail kullanılacak ise uygulama parolası oluşturunuz. Diğer kılavuzlara bakılarak bu işlem gerçekleştirilebilir.)
$SecurePassword = ConvertTo-SecureString -string $password -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential -argumentlist $UserName, $SecurePassword
#e-posta parametre bilgilerini giriniz.
$EmailParams = @{
From = "x@gmail.com"
To = "x@gmail.com"
Subject = "Database Backup"
Body = $body1 | Out-String
BodyAsHtml = $True
#Cc= "" #Başka birilerini CC ye eklemek isterseniz buraya yazabilirsiniz.
SmtpServer = "smtp.gmail.com"
Port = 587
UseSsl = $true
Credential = $Cred
}
#Call the Send-MailMessage to Send Email
Send-MailMessage @EmailParams
}else{
echo "Mail Gönderilmedi";
}
İşlemin başarılı olduğunu kontrol etmek için, script dosyasını çalıştırın ve maili kontrol edin.
Yukarıdaki örnekte bir klasör içine tüm yedekler gelmekteydi. Bu örnekte ise her yedek için günlük bir klasör ve onun içine yedeklerin geldiğini düşünerek script yazalım.


# Bu betik günlük olarak belirlediğiniz dosya içindeki anahtar kelimeye bakıp hata aldığınızda mail veya slack üzerinden bildirim gönderir.
# Aşağıdaki alanları doldurmanız gerekmektedir.
# $log kısmına klasör veya UNC path giriniz. (Dosya adı günlük değiştiği için tarih değişkeni ile birleştirme işlemi yapılmıştır.)
# content1 anahtar kelime "successfully completed" kelimesi geçiyor ise bildirim göndermez.
# content2 anahtar kelime "completed with 1 error" kelimesi geçiyor ise bildirim gönderir.
# Slack ve E-Maıl bilgi kısımlarını doldurunuz.
#<p> ve text kısımlarına hata mesajlarını yazınız.
$tarih = Get-Date -Format "dd_MM_yyyy"
$log = "\\ip_adresss\path\"+$tarih+"\FONETHBS_FONETPACS.log"
$content = Get-Content -Path $log
if($content){
$content1 = $content -match "successfully completed"
if($content1){
$logdata = 1
}else{
$content2 = $content -match "completed with 1 error"
if($content2){
$logdata = 4
}else{
$logdata = 4
}
}
}else{
$logdata = 4
}
$body1 = ConvertTo-Html -PreContent @"
<div>
<p>Oracle RMAN yedekleri gelmedi..</p>
</div>
"@
if($logdata -gt 2){
# SlackWebhook URL bilgilerini giriniz.
$uriSlack = "https://hooks.slack.com/services/T04L2K57F61323EE/B07J486EDDU7J/dk111MMoeMOrrs"
$body = ConvertTo-Json @{
pretext = "Database Backup"
text = "Oracle RMAN yedekleri gelmedi."
color = "#142954"
}
try {
Invoke-RestMethod -uri $uriSlack -Method Post -body $body -ContentType 'application/json' | Out-Null
} catch {
Write-Error (Get-Date) ": Update to Slack went wrong..."
Invoke-WebRequest -Method Post -Uri $Url -Body $body
}
#e-posta kullanıcı bilgilerini giriniz.
$UserName = "x@gmail.com"
$Password = "tfzd syf1y ha3cu dlpu" # (Gmail kullanılacak ise uygulama parolası oluşturunuz. Diğer kılavuzlara bakılarak bu işlem gerçekleştirilebilir.)
$SecurePassword = ConvertTo-SecureString -string $password -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential -argumentlist $UserName, $SecurePassword
#e-posta parametre bilgilerini giriniz.
$EmailParams = @{
From = "x@gmail.com"
To = "x@gmail.com"
Subject = "Database Backup"
Body = $body1 | Out-String
BodyAsHtml = $True
#Cc= "" #Başka birilerini CC ye eklemek isterseniz buraya yazabilirsiniz.
SmtpServer = "smtp.gmail.com"
Port = 587
UseSsl = $true
Credential = $Cred
}
#Call the Send-MailMessage to Send Email
Send-MailMessage @EmailParams
}else{
echo "Mail Gönderilmedi";
}
İşlemin başarılı olduğunu kontrol etmek için, script dosyasını çalıştırın ve maili kontrol edin.
Eğer her şey istediğiniz gibiyse, script dosyasını Windows üzerinde Task Scheduler ekleyerek bu işlemleri düzenli olarak yaptırabilirsiniz.
Powershell Task Scheduler hakkında daha fazla bilgi almak için diğer kılavuzlara bakınız.
