Ok, ich kann Sehen Sie, was Sie mit dem Befehl Select
versuchen, und während es sich gut anhört, funktioniert das nicht ganz. Sie können stattdessen eine Where
-Anweisung übergeben, die der von Ihnen benötigten Zeichenfolge entspricht, und die relevanten Daten in einer RegEx-Übereinstimmung erfassen. Verwenden Sie dann Select
, um diese Felder dem Objekt hinzuzufügen. die Benutzer und IPAddress Eigenschaften on the fly wie diese
| Where{$_.Message -match '"(.+?\\.+?)".+"(\d+\.\d+\.\d+\.\d+)"'}
Dazu Rohr Select
und bauen
:
So ein Where
Spiel, das sollte für Sie arbeiten würde
| Select TimeCreated,@{l='User';e={$Matches[1]}},@{l='IPAddress';e={$Matches[2]}}
Sie dann Setzen Sie alles zusammen und Sie erhalten:
get-winevent -FilterHashtable @{Logname = "Microsoft-Windows-TerminalServices-Gateway/Operational" ; ID = 300,302,303} | Where{$_.Message -match '"(.+?\\.+?)".+"(\d+\.\d+\.\d+\.\d+)"'} | Select TimeCreated,@{l='User';e={$Matches[1]}},@{l='IPAddress';e={$Matches[2]}}
uns ing, dass ich konnte Ausgabe mit einigen randomisierten Werten:
TimeCreated User IPAddress
----------- ---- ---------
9/14/2016 9:47:29 AM DOMAIN\dhxrjqb 216.229.149.87
9/14/2016 9:47:29 AM DOMAIN\fkoilrh 236.65.23.77
9/14/2016 9:47:29 AM DOMAIN\mvibope 20.7.45.231
Ok, ist die Lösung für das Problem, das Sie in Ihrem Kommentar bemerken eine kleine zwicken zum Regex einer Portion nicht gierig zu machen. Dies würde das tun:
| Where{$_.Message -match '"(.+?\\.+?)".+?"(\d+\.\d+\.\d+\.\d+)"'}
und alle zusammen wieder ...
get-winevent -FilterHashtable @{Logname = "Microsoft-Windows-TerminalServices-Gateway/Operational" ; ID = 300,302,303} | Where{$_.Message -match '"(.+?\\.+?)".+?"(\d+\.\d+\.\d+\.\d+)"'} | Select TimeCreated,@{l='User';e={$Matches[1]}},@{l='IPAddress';e={$Matches[2]}}
Es funktioniert wie erwartet, aber zeigt 1 oder 2 Protokolle – DisplayName
Wie viel Sie protokolliert have on '$ Events.Count'? – Avshalom
Aktualisiert die Antwort – Avshalom