2011-05-25 13 views
5

Mam skrypt powershell, który monitoruje plik dziennika, odfiltrowuje interesujące bity, a następnie przedstawia te bity do mnie, gdy są zapisane w pliku. Działa cudownie. Linia zainteresowań to:Kodowanie kolorami wyników get-content

get-content "$logFile" -wait | where { select-string $searchTerm -inp $_ } 

Teraz chcę mieć ochotę!

Chciałbym zmienić kolor czcionki za każdym razem, gdy napotkany zostanie określony termin. Mogę łatwo ustawić kolor czcionki, ale jak to zrobić w locie z powyższym stwierdzeniem?

Edytuj: Wyliczyłem, ale nie mogę wysłać odpowiedzi przez 8 godzin. Prześlemy to jutro.

Odpowiedz

3

Spróbuj

Get-Content $logFile -Wait | 
    Select-String $searchTerm | 
    ForEach {write-host -ForegroundColor red $_.line} 
+0

Yip, ów jeden. Tnx –

4

Jeśli szukasz czegoś, co zapewnia selektywne kodowanie kolorów, a następnie spróbować czegoś takiego.

Najpierw należy skonfigurować funkcję pomocnika, aby wybrać odpowiedni kolor:

function Get-LogColor { 
    Param([Parameter(Position=0)] 
    [String]$LogEntry) 

    process { 
     if ($LogEntry.Contains("DEBUG")) {Return "Green"} 
     elseif ($LogEntry.Contains("WARN")) {Return "Yellow"} 
     elseif ($LogEntry.Contains("ERROR")) {Return "Red"} 
     else {Return "White"} 
    } 
} 

Następnie wykonać linię, która wygląda tak:

gc -wait $logFile | ForEach {Write-Host -ForegroundColor (Get-LogColor $_) $_} 
+0

Twoja odpowiedź jest bardziej konkretna, czego chcę. Działa, ale także drukuje losowo następujący błąd: 'Get-LogColor: Nie można powiązać argumentu z parametrem 'LogEntry', ponieważ jest to pusty ciąg. Na linii: 1 char: 156 + ... (Get-LogColor $ _) $ _} + ~~ + CategoryInfo: invaliddata: (:) [Get-LogColor], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationErrorEmptyStringNotAllowed, Get -LogColor' –

+0

Nie widziałem twoich danych źródłowych, ale mogę tylko założyć, że w twoim pliku dziennika znajdują się puste linie, co technicznie złamałoby regułę wiążącą "Obowiązkowe = $ true". Usunąłem to z mojej odpowiedzi; Jedyną konsekwencją jest, że twoje puste wiersze pliku dziennika zostaną przekazane z powrotem do konsoli, ale tak by się stało z oświadczeniem "Get-Content (gc)". – StevoInco

+0

thnkx, teraz działa dobrze. to powinna być zaakceptowana odpowiedź –