2016-04-19 4 views
1

Ich versuche, eine Protokolldatei für Vorkommen eines Wortes zu sehen ("Purge"). Ich möchte die letzten 10 übereinstimmenden Zeilen anzeigen (zum Zeitpunkt der Ausführung des Befehls) und beobachten Sie die Datei für neu angehängte Zeilen, die den Kriterien entsprechen.Powershell: Anzeigen der letzten X Zeilen eines Protokolls, die einem Kriterium entsprechen und beobachten Sie die Datei

Bisher habe ich etwas mit Powershell arbeiten:

get-content .\CallAudit.Engine.log -tail 10 -Wait | where {$_ -match "Purge"} 

Dies funktioniert, aber es wird die letzte (alle) 10 Zeilen und gilt nur dann den Filter.

Ich möchte

  • nur die bekommen passende letzten 10 Zeilen
  • haben den Befehl halten die Datei zu beobachten.

Kann dies getan werden?

Antwort

2

-Tail 10 wird dir nicht helfen, weil Ihr purge -Filter ausgeführt wird, nachdem er die letzten 10 Zeilen gelesen hat (was nicht purge enthalten kann oder nicht).

Ich würde dies in zwei Anrufe aufteilen. Eine, um die letzten 10 Werte aufzulisten, und eine, um sie zu überwachen.

Get-Content -Path .\CallAudit.Engine.log | Where-Object {$_ -match "Purge"} | Select-Object -Last 10 
Get-Content -Path .\CallAudit.Engine.log -Wait -Tail 0 | Where-Object {$_ -match "Purge"} 
+0

Schön, sieht sehr "gesunden Menschenverstand". Gibt es eine Möglichkeit, die beiden Ergebnislisten miteinander zu verknüpfen, so dass dies ein "Einzeiler" ist? –

+0

Warum? Die Idee war, sie in erster Linie aufzuteilen, um zu vermeiden, dass die "where"/foreach-Schleifen zu einfach sind. Lesbarkeit sollte immer Priorität haben. :-) Wenn Sie es wirklich in einer Zeile benötigen, fügen Sie '' 'nach der ersten Zeile hinzu, um den aktuellen Befehl/Zeile zu beenden und die Zeilen zu verbinden. Ex .. 'Get-Content .. | wo .. | Wähle -letztes 10; get-content -wait | wo .... ' –

+0

Warum? Weil ich bin gespannt auf die Syntax :) –

2

Verwenden Sie einfach das richtige Werkzeug für den Job, der less.exe ist. Es wird meistens als Pager verwendet (entspricht more unter Windows), aber es ist ein großartiges Werkzeug, mit dem man Dateien schnell untersuchen und überwachen kann.

Für Ihren Fall müssen Sie die folgenden weniger Optionen verwenden:

  • &/ - Filterung Linien (die gleichen wie where-object .... match)
  • F - vorwärts für immer (die gleichen wie gc .. -Wait -Tail)

Wenn die Datei log.txt ist und Sie nur auf Zahlen überwachen müssen, lautet der Befehl:

Dies ist, wie die Ausgabe wie folgt aussieht: enter image description here

ändern [0-9]+ Ihr Muster entsprechen und alles andere verlassen. Ein weiteres Beispiel, zeigen nur Fehler in Echtzeit erstellen und verstecken alles andere

less.exe +"&^ERROR`nF" build.log 

Sie können weniger erhalten von chocolatey: cinst less.

Die Vorteile der Verwendung von weniger über reine Powershell sind hier:

  • Cross-Plattform-
  • weniger sehr mächtig ist und durch die Anzahl der Windows-Tools wie git, Powershell Community Erweiterungen usw. verwendet Es ist gut zu haben solches Werkzeug in deinem Arsenal.
+0

+1 für die Info und sehr nützlich für eine Dev Box. Mein Szenario beinhaltet RDP in möglicherweise Produktionsmaschinen, möglicherweise die Maschinen der Kunden, so dass die Installation von Drittanbieter-Tools (Chocolatey + Pakete) möglicherweise unerwünscht oder geradezu unmöglich ist. Deshalb bevorzuge ich PS - oder eine andere Lösung, die eingebaute Tools verwendet. –

+0

Sie könnten less.exe in die Produktion kopieren oder direkt von der Freigabe verwenden. Es ist eine einzelne Datei ~ 100KB. – majkinetor

Verwandte Themen