Log dosyarı üzerinde çalışırken powershell ile parse etmeniz gerekebilir. Aşağıdaki örnek üzerinde regex kullanarak sonuçlar içindeki email adreslerini nasıl alabileceğinizi göstereceğim.
Öncelikle işlem kayıtların listesine ihtiyacımız olacak.
log içinde aşağıdaki örneğe benzer satırlarınızın olduğunu varsayalım. Gördüğünüz gibi loglar buna benzer formatta karşınız çıkabilir içerisinde sadece from olanları ayırdığınız istediğiniz satırları elde etmiş olacaksınız. Fakat bu sonuç sizin için yeterli olmayacaktır. Eğer sadece mail adresinin kendisine ihtiyacınız varsa bu durumda replace yaparak mail adresi dışındaki verileri silmeniz mümkün olabilir fakat bunun için birden fazla replace işlemi yapmanız gerekebilir bu durumda regex hayatımızı kuratacak. Öncelikle regex içeriğimizi belirliyoruz ben sağlıklı çalışan bir email adress regexi buldum. ” [a-zA-Z0-9.!£#$%&’^_`{}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*” bunu kullanabilirsiniz. Sonrasında ilgili log dosyamız içinde from geçen satırları getirdik. Bunlar bize bir liste döndürecek bunu da $kayitlar adinda bir değişkene atadık. Sonrasında -match komutu ile neye göre eşleşme yapacağımızı söylülüyor. Şimdi dönen ehr satırdaki eşleşmeleri yapakalamak için foreach ile döngüye girmesini sağladık. $ Matches[0] elemanın istediğimiz değer dönecek
Mar 14 18:12:29 smtpgw2 postfix/qmgr[3644987]: 1B96E1adf2j12: from=<ozgur@ozgurmazlum.com>,
Mar 14 18:12:29 smtpgw2 postfix/qmgr[3644987]: 1B96E1adf2j12: from=<ozgur@ozgurmazlum.net>,
Mar 14 18:12:29 smtpgw2 postfix/qmgr[3644987]: 1B96E1adf2j12: from=<ozgur@ozgurmazlum.com.tr>,
$regex = [regex]"[a-zA-Z0-9.!£#$%&'^_`{}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*" $kayitlar = Select-String -Pattern "from" -Path c:\log.txt $kayitlar -match $regex | foreach {$Matches[0]}
sonuca baktığımızda aşağıdakine benzer sadece mail adreslerinin filtrelendiğini göreceksiniz.
ozgur@ozgurmazlum.com
ozgur@ozgurmazlum.net
ozgur@ozgurmazlum.com.tr