Dela via


WMI-uppgifter: Händelseloggar

WMI-uppgifter för händelseloggar hämtar händelsedata från händelseloggfiler och utför åtgärder som att säkerhetskopiera eller rensa loggfiler. Andra exempel finns i TechNet ScriptCenter på https://www.microsoft.com/technet.

Skriptexemplen som visas i det här avsnittet hämtar endast data från den lokala datorn. Mer information om hur du använder skriptet för att hämta data från fjärrdatorer finns i Ansluta till WMI på en fjärrdator.

Följande procedur beskriver hur du kör ett skript.

Så här kör du ett skript

  1. Kopiera koden och spara den i en fil med tillägget .vbs, till exempel filename.vbs. Kontrollera att textredigeraren inte lägger till ett .txt filnamnstillägg.
  2. Öppna ett kommandotolksfönster och navigera till katalogen där du sparade filen.
  3. Skriv cscript filename.vbs i kommandotolken.
  4. Om du inte kan komma åt en händelselogg kontrollerar du om du kör från en upphöjd kommandotolk. Vissa händelseloggar, till exempel säkerhetshändelseloggen, kan skyddas av användaråtkomstkontroller (UAC).

Not

Som standard visar cscript utdata från ett skript i kommandotolkens fönster. Eftersom WMI-skript kan generera stora mängder utdata kanske du vill omdirigera utdata till en fil. Skriv cscript filename.vbs > outfile.txt i kommandotolken för att omdirigera utdata från filename.vbs skriptet till outfile.txt.

I följande tabell visas skriptexempel som kan användas för att hämta olika typer av data från den lokala datorn.

Hur gör jag... WMI-klasser eller -metoder
... hämta information om händelseloggen Säkerhet? Inkludera behörigheten Security när du ansluter till klassen Win32_NTEventlogFile. Mer information finns i köra privilegierade åtgärder med 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
}
... säkerhetskopiera en händelselogg?

Använd Win32_NTEventlogFile-klassen och metoden BackupEventLog. Du kan behöva ta med behörigheten Backup när du ansluter till WMI. Mer information finns i köra privilegierade åtgärder med 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" }

... säkerhetskopiera en händelselogg mer än en gång?

Kontrollera att säkerhetskopieringsfilen har ett unikt namn innan du använder metoden Win32_NTEventlogFile och BackupEventLog. Operativsystemet tillåter inte att du skriver över en befintlig säkerhetskopia. Du måste antingen flytta säkerhetskopian eller byta namn på den innan du kan köra skriptet igen. Du kan behöva ta med behörigheten Backup när du ansluter till WMI. Mer information finns i köra privilegierade åtgärder med 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" }

... fastställa antalet poster i en händelselogg?

Använd klassen Win32_NTEventlogFile och kontrollera värdet för egenskapen NumberOfRecords.

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 }

... rensa mina händelseloggar?

Använd klassen Win32_NTEventlogFile och metoden ClearEventLog.

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" }

... läsa händelser från händelseloggarna?

Använd klassen Win32_NTLogEvent.

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-uppgifter för skript och program

WMI C++-programexempel

TechNet ScriptCenter