2011-05-25 4 views
5

Ho uno script di PowerShell che monitora un file di registro, filtra i bit interessanti e poi me li presenta come e quando vengono scritti nel file. Funziona meravigliosamente. La linea di interesse è:Risultati del contenuto ottenuto con codifica a colori

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

Ora voglio avere fantasia!

Vorrei che il colore del carattere cambi ogni volta che si incontra un termine particolare. Posso impostare il colore del carattere abbastanza facilmente, ma come lo faresti al volo con l'affermazione precedente?

Modifica: Calcolato, ma non è possibile inviare una risposta per 8 ore. Lo caricherà domani.

risposta

3

Prova

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

Yip, questo è quello. Tnx –

4

Se siete alla ricerca di qualcosa che fornisce selettiva codifica colore, quindi provare qualcosa di simile.

In primo luogo, impostare una funzione di supporto per selezionare un colore appropriato:

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"} 
    } 
} 

quindi eseguire una riga simile a questa:

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

La tua risposta è più specifica, a ciò che voglio. Funziona, ma sta anche stampando il seguente errore in modo casuale: 'Get-LogColor: Impossibile associare l'argomento al parametro 'LogEntry' perché è una stringa vuota. alla riga: 1 char: 156 + ... (Get-LogColor $ _) $ _} + ~~ + CategoryInfo: InvalidData: (:) [Get-LogColor], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationErrorEmptyStringNotAllowed, Get -LogColor' –

+0

Non ho visto i tuoi dati di origine, ma posso solo supporre che ci siano linee vuote nel tuo file di log, che tecnicamente avrebbe infranto la regola di binding 'Obbligatorio = $ true'. Ho rimosso questo nella mia risposta; L'unica conseguenza è che le righe del file di registro vuoto verranno passate direttamente alla console, ma ciò avverrebbe comunque con una semplice dichiarazione "Get-Content (gc)". – StevoInco

+0

thnkx, ora funziona bene. questa dovrebbe essere la risposta accettata –