2016-03-24 9 views
2

Ich versuche, eine bestimmte Zeile aus der Nachrichtenausgabe eines Get-Winevent-Cmdlets zu extrahieren und konnte keinen Weg finden, dies zu tun (ich könnte sein falsches Suchen, aber ich lerne immer noch fortgeschrittene Skriptmethoden). Was ich laufe, ist dies:Auswählen bestimmter Zeilen/Daten aus Get-Winevent-Nachricht in Powershell

Get-WinEvent -ComputerName $DC -FilterHashtable @{Logname='Security';Keywords='9007199254740992';Data=$userid} -MaxEvents 1 | Select Message | Format-List 

, das mit einer Nachricht similiar darauf zurückkommen wird (geändert einige Informationen zu generischer info):

Message : The computer attempted to validate the credentials for an account. 
Authentication Package: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0 
Logon Account: jdoe 
Source Workstation: Generic-Computername 
Error Code: 0x0 

Ich versuche, eine einfache Möglichkeit zu schaffen, eine finden Computer, an den sich zuletzt jemand zur schnelleren Fehlersuche angemeldet hat, aber ich kann nicht nur die Quell-Workstation-Zeile herausfiltern, ich könnte einfach nicht die richtige Syntax für eine gute Suche haben, um die Ergebnisse zu finden, nach denen ich suche, aber ungefähr eine Woche lang gesucht habe jetzt und habe nichts gefunden, wonach ich suche, jede Hilfe wäre großartig!

+0

Können Sie ein Beispiel für '$ userid' zu' Data' zugewiesen liefern (zu reproduzieren)? Kannst du auch klarstellen, was du erreichen willst? –

+0

Definitiv, wäre $ userid etwas in der Art von jdoe, nur ein Benutzername, der im Datenfeld des Ereignisprotokolls ist, was es mir erlaubt, ein Protokoll mit diesem spezifischen Benutzernamen zu erstellen, habe ich versucht, Regex wie in Ihrem antworte und das hat funktioniert! Was ich erreichen möchte, ist eine einfache Möglichkeit zu sehen, auf welchem ​​Computer sich jemand zuletzt eingeloggt hat, damit ich weiß, auf welchem ​​Computer ich versuche, einen Benutzer zu erreichen und ihm zu helfen, wenn Sie einen leichteren oder besseren Weg kennen Ich bin ganz Ohr :) –

Antwort

1

Ich bin nicht sicher, welche Informationen Sie abrufen möchten, aber ich bin ziemlich sicher, es gibt einen besseren Weg als mit Get-WinEvent, um diese Informationen zu erhalten. Wenn Sie jedoch nur den Wert von Source Workstation bekommen möchten, können Sie das mit einem regulären Ausdruck:

$event = Get-WinEvent ` 
    -ComputerName $DC ` 
    -FilterHashtable @{Logname='Security';Keywords='9007199254740992';Data=$userid} ` 
    -MaxEvents 1 ` 
    | Select -expand Message 

[regex]::Match($event, 'Source Workstation:\s*(.*)\s*').Groups[1].Value 
Verwandte Themen