Freigeben über


WMI-Tasks: Ereignisprotokolle

WMI-Aufgaben für Ereignisprotokolle beziehen Ereignisdaten aus Ereignisprotokolldateien und führen Vorgänge wie das Sichern oder Löschen von Protokolldateien aus. Weitere Beispiele finden Sie im TechNet ScriptCenter unter https://www.microsoft.com/technet.

In den in diesem Artikel enthaltenen Skriptbeispielen werden nur Daten vom lokalen Computer abgerufen. Weitere Informationen zum Verwenden des Skripts zum Abrufen von Daten von Remotecomputern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

Nachstehend wird die Skriptausführung näher beschrieben.

So führen Sie ein Skript aus

  1. Kopieren Sie den Code, und speichern Sie ihn in einer Datei mit VBS-Erweiterung, z. B. filename.vbs. Stellen Sie sicher, dass der Text-Editor der Datei keine TXT-Erweiterung hinzufügt.
  2. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
  3. Geben Sie cscript filename.vbs in die Eingabeaufforderung ein.
  4. Wenn Sie nicht auf ein Ereignisprotokoll zugreifen können, überprüfen Sie, ob Sie eine Eingabeaufforderung mit erhöhten Rechten verwenden. Einige Ereignisprotokolle, z. B. das Sicherheitsereignisprotokoll, können durch die Benutzerkontensteuerung (User Account Control, UAC) geschützt sein.

Hinweis

Standardmäßig zeigt cscript die Ausgabe eines Skripts im Eingabeaufforderungsfenster an. Da WMI-Skripts sehr viele Ausgabedaten erzeugen können, sollten Sie die Ausgabe in eine Datei umleiten. Geben Sie cscript filename.vbs > outfile.txt in die Eingabeaufforderung ein, um die Ausgabe des Skripts filename.vbs an outfile.txt umzuleiten.

In der folgenden Tabelle sind Skriptbeispiele aufgeführt, die zum Abrufen verschiedener Datentypen vom lokalen Computer verwendet werden können.

Vorgehensweisen WMI-Klassen oder -Methoden
Abrufen von Informationen zum Ereignisprotokoll „Sicherheit“ Schließen Sie die Berechtigung Security ein, wenn Sie eine Verbindung mit der Win32_NTEventlogFile-Klasse herstellen. Weitere Informationen finden Sie unter Ausführen privilegierter Vorgänge mit VBScript.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Security)}!\\" & _
        strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile " _
        & "Where LogFileName='Security'")
For Each objLogFile in colLogFiles
    Wscript.Echo objLogFile.NumberOfRecords
    Wscript.Echo "Maximum Size: " _
    &  objLogfile.MaxFileSize 
Next
PowerShell
$strComputer = "."
$colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_.LogFileName -eq 'security'}
foreach ($objLogFile in $colLogFiles) 
{ 
    "Record Number: " + $objLogFile.NumberOfRecords
    "Maximum Size: " + $objLogFile.MaxFileSize
}
Sichern eines Ereignisprotokolls

Verwenden Sie die Win32_NTEventlogFile-Klasse und BackupEventLog-Methode. Möglicherweise müssen Sie die Berechtigung Backup einschließen, wenn Sie eine Verbindung mit WMI herstellen. Weitere Informationen finden Sie unter Ausführen privilegierter Vorgänge mit VBScript.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Backup)}!\\" & strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery ("Select * from Win32_NTEventLogFile " & "Where LogFileName='Application'")
For Each objLogfile in colLogFiles
    errBackupLog = objLogFile.BackupEventLog("c:\scripts\application.evt")
    WScript.Echo "File saved as c:\scripts\applications.evt"
Next

PowerShell
              
              $strComputer = "." $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_.LogFileName -eq 'Application'} 

foreach ($objLogFile in $colLogFiles) { [void]$objLogFile.BackupEventlog("c:\scripts\applications.evt") "File saved as c:\scripts\applications.evt" }

Mehrmalige Sichern eines Ereignisprotokolls

Stellen Sie sicher, dass die Sicherungsdatei einen eindeutigen Namen hat, ehe Sie die Methoden Win32_NTEventlogFile und BackupEventLog verwenden. Das Betriebssystem erlaubt nicht das Überschreiben einer vorhandenen Sicherungsdatei. Sie müssen die Sicherungsdatei entweder verschieben oder umbenennen, ehe Sie das Skript erneut ausführen können. Möglicherweise müssen Sie die Berechtigung Backup einschließen, wenn Sie eine Verbindung mit WMI herstellen. Weitere Informationen finden Sie unter Ausführen privilegierter Vorgänge mit VBScript.

VB
dtmThisDay = Day(Date)
dtmThisMonth = Month(Date)
dtmThisYear = Year(Date)
strBackupName = dtmThisYear & "_" & dtmThisMonth & "_" & dtmThisDay
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Backup)}!\\" & strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery ("Select * from Win32_NTEventLogFile " & "Where LogFileName='Application'")
For Each objLogfile in colLogFiles
    objLogFile.BackupEventLog("c:\scripts\" & strBackupName & "_application.evt")
    objLogFile.ClearEventLog()
    WScript.Echo "File saved: " & strBackupName & "_application.evt"
Next

PowerShell
              
              $CurDate = Get-Date $strBackupName = $curDate.Year.ToString() + "_" + $curDate.Month.ToString() + "_" + $CurDate.Day.ToString() 

$strComputer = "." $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_.LogFileName -eq 'Application'} foreach ($objLogFile in $colLogFiles) { $BackupFile = $objLogFile.BackupEventlog("c:\scripts" + $strBackupName + "_application.evt") "File saved: c:\scripts" + $strBackupName + "_application.evt" }

Bestimmen der Anzahl der Datensätze in einem Ereignisprotokoll

Verwenden Sie die Win32_NTEventlogFile-Klasse, und überprüfen Sie den Wert der NumberOfRecords-Eigenschaft.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery ("Select * from Win32_NTEventLogFile " & "Where LogFileName='System'")
For Each objLogFile in colLogFiles
    Wscript.Echo objLogFile.NumberOfRecords
Next

PowerShell
              
              $strComputer = "." $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_.LogFileName -eq 'System'} 

foreach ($objLogFile in $colLogFiles) { $objLogFile.NumberOfRecords }

Löschen meiner Ereignisprotokolle

Verwenden Sie die Win32_NTEventlogFile-Klasse und die ClearEventLog-Methode.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Backup, Security)}!\\" & strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery ("Select * from Win32_NTEventLogFile " & "Where LogFileName='Application'")
For Each objLogfile in colLogFiles
    objLogFile.ClearEventLog()
    WScript.Echo "Cleared application event log file"
Next

PowerShell
              
              $strComputer = "." $colLogFiles = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $strComputer | Where-Object {$_.LogFileName -eq 'System'} 

foreach ($objLogFile in $colLogFiles) { [void]$objLogFile.ClearEventlog() "Cleared application event log file" }

Lesen von Ereignissen aus dem Ereignisprotokoll

Verwenden Sie die Win32_NTLogEvent-Klasse.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
    ("Select * from Win32_NTLogEvent " _
        & "Where Logfile = 'System'")
For Each objEvent in colLoggedEvents
    Wscript.Echo "Category: " & objEvent.Category & VBNewLine _
    & "Computer Name: " & objEvent.ComputerName & VBNewLine _
    & "Event Code: " & objEvent.EventCode & VBNewLine _
    & "Message: " & objEvent.Message & VBNewLine _
    & "Record Number: " & objEvent.RecordNumber & VBNewLine _
    & "Source Name: " & objEvent.SourceName & VBNewLine _
    & "Time Written: " & objEvent.TimeWritten & VBNewLine _
    & "Event Type: " & objEvent.Type & VBNewLine _
    & "User: " & objEvent.User
Next

PowerShell
              
              $strComputer = "." $colLogFiles = Get-WmiObject -Class Win32_NTLogEvent -ComputerName $strComputer | Where-Object {$_.LogFile -eq 'System'} 

foreach ($objEvent in $colLoggedEvents) { "Category: " + $objEvent.Category "Computer Name: " + $objEvent.ComputerName "Event Code: " + $objEvent.EventCode "Message: " + $objEvent.Message "Record Number: " + $objEvent.RecordNumber "Source Name: " + $objEvent.SourceName "Time Written: " + $objEvent.TimeWritten "Event Type: " + $objEvent.Type "User: " + $objEvent.Use }

WMI-Aufgaben für Skripts und Anwendungen

WMI-C++-Anwendungsbeispiele

TechNet ScriptCenter