2016-09-14 2 views
1

ich versuche zu ziehen all Benutzername, Zeit erstellt und öffentliche IP-Adresse vonWählen

Microsoft Windows-Terminalservices-Gateway/Operational Ereignis.

enter image description here

ich alle Ereignisse von Nachrichten mit folgenden Befehl, aber ich brauche nur den Benutzernamen und IP-

get-winevent -FilterHashtable @{Logname = "Microsoft-Windows-TerminalServices-Gateway/Operational" ; ID = 300,302,303} 

mit diesem kein Glück Versuch

get-winevent -FilterHashtable @{Logname = "Microsoft-Windows-TerminalServices-Gateway/Operational" ; ID = 300,302,303}| select timecreated -expand Message [regex]::Match($event, 'user:\s*(.*)\s*').Groups[1].Value 

Antwort

1

Ich denke, es gibt einen besseren Ansatz, um die ToXml() Methode auf dem EventLogRecord Objekt mit:

Erste auch die Events:

$Events = Get-WinEvent -FilterHashtable @{Logname = "Microsoft-Windows-TerminalServices-Gateway/Operational" ; ID = 300,302,303} 

Dann nehmen Sie zum Beispiel das erste Element im Array und wandelt es in XML:

[xml]$Event = $Events[0].ToXml() 

Jetzt können Sie alle Informationen sehen Sie brauchen:

$Event.Event.UserData.EventInfo 

Update: Set es für Sie, sollte dies tun, um die Arbeit:

$Events = Get-WinEvent -FilterHashtable @{Logname = "Microsoft-Windows-TerminalServices-Gateway/Operational" ; ID = 300,302,303} 

$ArrayList = New-Object System.Collections.ArrayList 
Foreach ($Event in $Events) 
{ 
[xml]$Xml = $Event.ToXml() 
$Row = "" | Select Username,TimeCreated,IPAddress 
$Row.Username = $Xml.Event.UserData.EventInfo.Username 
$Row.TimeCreated = $Event.TimeCreated.ToString() 
$Row.IPAddress = $Xml.Event.UserData.EventInfo.IpAddress 
[void]$ArrayList.Add($Row) 
} 

$ArrayList 
+0

Es funktioniert wie erwartet, aber zeigt 1 oder 2 Protokolle – DisplayName

+0

Wie viel Sie protokolliert have on '$ Events.Count'? – Avshalom

+0

Aktualisiert die Antwort – Avshalom

2

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]}} 
+0

genial, aber in einigen Benutzern ist es nur Hinzufügen von IP von Ressourcen wie "10.10 angeschlossen.1 "des lokalen Computers – DisplayName

+0

Können Sie ein Beispiel für eine Nachricht geben, wo es das tut? – TheMadTechnician

+0

Ok ich habe es auf Ereignis es 302 das Ereignis hat 2 ips' Der Benutzer "doaminuser", auf Client-Computer "10.255.188.2", verbunden mit Ressource "172.10.1.1.". – DisplayName