Bu, sadece kafamdan kısaca düşündüğüm kavramsal bir sorudur. Nasıl yapabileceğime dair bir fikrim var, ancak yapabileceğimi düşündüğümden daha karmaşık görünüyor.
Yaygın bir ihtiyaç, bir dosyayı aramaktır (örneğin bir hata günlüğü olabilir) ve bu dosyayı belirli bir dize değeri aramak istiyorum. Ancak benim durumumda, bazı uygulamaların bir satırda hata çıktığını düşündüm, ancak hata metnini içeren satır o günlüğün ilerleyen satırında ya da önceki satırda olabilir (örneğin, SQL Server hata günlükleri). Dolayısıyla bu durumda, aramada sağlanan belirli bir dizeyle bulunan çizgiyi dahil etmek isteyebilirim, ancak ondan önce ve sonra çizgiyi (veya hatta çizgileri) dahil etmek isteyebilirim.
Senaryolarımı kullanabilecek veya bulabilecek başkalarının okunabilirliği için elimden geldiğince basit tutmaya çalışıyorum. Kafamda bunun kolay yazılmış olacağını düşünemiyorum.
DÜZENLE
Select-String
Bunu kullanarak verilen cevaba dayanarak yapmaya çalıştığım bir örnek:
[void][System.Reflection.Assembly]::[LoadWithPartialName]('Microsoft.SqlServer.SMO')
$s = New-Object Microsoft.SqlServer.Management.Smo.Server MyServer
$s.EnumErrorLogs() | select -ExpandProperty Name |
foreach { $s.ReadErrorLog($_) | select-string -Pattern "*Serverity: 25*" -Context 3 -SimpleMatch |
select LogDate, ProcessInfo, Text