Moin zusammen,
ich möchte gerne per VB.NET EventLogs von entfernten Hosts auslesen. Hier mein bisheriger Code:
Der Code funktioniert für Lokal super... allerdings nicht mit anderen Hosts im Netzwerk. Die Fehlermeldung ist immer, er könne den Netzwerkpfad nicht finden, obwohl die Hosts erreichbar sind.
Wenn ich das laut MSDN richtig verstanden habe, lässt die Eigenschaft EventLog.MachineName auch nur Computernamen zu und keine IP-Adressen.
Jetzt hab ich schon gegooglet und Alternativen gesucht. Viele reden über WMI... Allerdings habe ich keine Idee davon wie das funktioniert.
Hat einer von euch ein laufendes Beispiel?
Danke schonmal!
Gruß,
Hendrik
ich möchte gerne per VB.NET EventLogs von entfernten Hosts auslesen. Hier mein bisheriger Code:
VB.NET-Quellcode
- Imports System.Diagnostics
- Imports System.Linq
- Public Class Form1
- Dim DT As DataTable
- Dim DV As DataView
- Private Sub LadenButton_Click(sender As Object, e As EventArgs) Handles LadenButton.Click
- DT = New DataTable
- DV = New DataView
- DT.Columns.Add(New DataColumn With {.ColumnName = "Typ", .DataType = GetType(String)})
- DT.Columns.Add(New DataColumn With {.ColumnName = "Datum", .DataType = GetType(Date)})
- DT.Columns.Add(New DataColumn With {.ColumnName = "Quelle", .DataType = GetType(String)})
- DT.Columns.Add(New DataColumn With {.ColumnName = "Ereignis-ID", .DataType = GetType(String)})
- DT.Columns.Add(New DataColumn With {.ColumnName = "Message", .DataType = GetType(String)})
- Dim EvtLog As New EventLog("System", IPTextBox.Text)
- Dim Daten = From logEvent As EventLogEntry In EvtLog.Entries
- Where logEvent.TimeWritten >= DateAdd(DateInterval.Day, -30, Now.Date) _
- And (logEvent.EntryType = EventLogEntryType.Error Or logEvent.EntryType = EventLogEntryType.Warning Or logEvent.EntryType = 0) _
- Select logEvent
- Order By logEvent.TimeWritten ' EntryType = 0 definiert die Kritischen Fehler!
- For Each Ereignis As EventLogEntry In Daten
- DT.Rows.Add(Ereignis.EntryType.ToString, Ereignis.TimeWritten, Ereignis.Source, EventInstanceToID(Ereignis.InstanceId), Ereignis.Message)
- Next
- Label1.Text = "Anzahl: " & Daten.Count
- DV = DT.DefaultView
- DataGridView1.DataSource = DV
- EvtLog.Close()
- End Sub
- Function EventInstanceToID(ByRef lInstance As Long) As String
- Dim lEventID As Int32
- 'Take just the integer part
- lEventID = CInt(lInstance And CLng(Int32.MaxValue))
- lEventID = (lEventID And &H3FFFFFFF)
- If lEventID.ToString.Length > 5 Then
- Return (lEventID.ToString.Substring(lEventID.ToString.Length - 1, 1))
- Else
- Return (lEventID.ToString)
- End If
- End Function
- End Class
Der Code funktioniert für Lokal super... allerdings nicht mit anderen Hosts im Netzwerk. Die Fehlermeldung ist immer, er könne den Netzwerkpfad nicht finden, obwohl die Hosts erreichbar sind.
Wenn ich das laut MSDN richtig verstanden habe, lässt die Eigenschaft EventLog.MachineName auch nur Computernamen zu und keine IP-Adressen.
Jetzt hab ich schon gegooglet und Alternativen gesucht. Viele reden über WMI... Allerdings habe ich keine Idee davon wie das funktioniert.
Hat einer von euch ein laufendes Beispiel?
Danke schonmal!
Gruß,
Hendrik
Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.