xaero1982
Goto Top

Eventlog - bestimmte Events exportieren und Eventlog leeren

Moin Zusammen,

aufgrund eines ziemlichen GAUs (Ein unbekannter Nutzer hat die Daten aus einem Verzeichnis gelöscht) bin ich gezwungen die Überwachung einzustellen.
Da dieser Ordner einem ziemlichen Zugriff unterliegt hab ich es zunächst auch nur auf Löschvorgänge und Änderungen der Berechtigungen (da spielt auch immer jemand rum) beschränkt - dennoch viel.

Da ich sonst eigentlich nichts aus dem Security Eventlog benötige will ich ein mal am Tag das Eventlog löschen, aber zunächst sollen die relevanten Events extrahiert werden.

Die IDs sind:
4656
4658
4664
4660
4670

Die Events will ich in eine txt exportieren mit dem Datum versehen.

Anschließend soll das Security Log geleert werden.

Batch oder vbs wäre wünschenswert.

Hat da zufällig jemand was parat? Finde leider nur was zu kompletten Exports.

Gruß

Content-Key: 240692

Url: https://administrator.de/contentid/240692

Printed on: April 25, 2024 at 00:04 o'clock

Member: Xaero1982
Xaero1982 Jun 12, 2014 at 07:01:24 (UTC)
Goto Top
On Error Resume Next

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20


strComputer = "localhost"  

Set fso = CreateObject("Scripting.FileSystemObject")  

filename = "Security.txt"  

'========================================================  
Set filesys = CreateObject("Scripting.FileSystemObject")  
If filesys.FileExists(filename) Then
	filesys.DeleteFile filename
End If

SET fsoFile = fso.OpenTextFile(filename,8,true)
'========================================================  

   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE EventCode = '4656' OR EventCode = '4658' OR EventCode = '4664' OR EventCode = '4660' OR EventCode = '4670'", "WQL", _  
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)

   For Each objItem In colItems
      str = Str & ("EventCode: " & objItem.EventCode) &vbcrlf  
      str = Str & ("Message: " & objItem.Message) &vbcrlf  
      str = Str & ("TimeGenerated: " & WMIDateStringToDate(objItem.TimeGenerated)) &vbcrlf  
      str = Str & ("User: " & objItem.User) &vbcrlf  
      str = Str & ("------------------------------------------------------------------------------") &vbcrlf  
   Next

fsoFile.Writeline(str)

spuckt mir nicht das gewünschte aus - nämlich nix :/ Jemand eine Idee?

Gruß
Member: colinardo
Solution colinardo Jun 12, 2014 updated at 07:11:01 (UTC)
Goto Top
Moin Xaero,
also mit Powershell z.B. kein Hexenwerk:
# Events in CSV-Datei exportieren
Get-WinEvent -LogName Security | ?{$_.ID -eq 4656 -or $_.ID -eq 4658 -or $_.ID -eq 4664 -or $_.ID -eq 4660 -or $_.ID -eq 4670} | export-csv "C:\events.csv" -NoTypeInformation -Delimiter ";"  
# Eventlog löschen
Clear-EventLog -LogName Security -Confirm:$false

Mehr zur exakteren Event-Filterung kannst du hier nachlesen:

Grüße Uwe
Member: Xaero1982
Xaero1982 Jun 12, 2014 at 07:07:09 (UTC)
Goto Top
Moin Uwe,

danke erst mal.

Ich hab noch nicht wirklich viel mit PS gemacht.

Kann ich das auch einfach in den Taskplaner einfügen und er ruft die PS-Datei entsprechend auf? face-smile

Gruß
Member: colinardo
Solution colinardo Jun 12, 2014, updated at Jun 27, 2014 at 16:21:21 (UTC)
Goto Top
Zitat von @Xaero1982:
Kann ich das auch einfach in den Taskplaner einfügen und er ruft die PS-Datei entsprechend auf? face-smile
Sicher kein Problem aber vorher solltest du zuerst die Execution-Policy prüfen.

Hier mal alles für den Anfang mit Powershell:

back-to-topAnleitung: Wie starte ich Powershell-Scripte
  • Zuerst speicherst man den Code in einer Textdatei mit der Endung .ps1.
  • Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine Powershell-Konsole und gibt dort den Befehl Set-ExecutionPolicy RemoteSigned -Force ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden: Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
  • Jetzt kann das Powershell-Script in der Konsole mit Eingabe des Pfades der Scriptdatei, oder mit einem Rechtsklick auf die Script-Datei :Mit Powershell ausführen gestartet werden.

Im Taskplaner setzt du dann unter Auszuführendes Programm den Pfad zur Powershell-EXE ("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe") und unter Argumente dann den Pfad zum Script.
Member: Xaero1982
Xaero1982 Jun 12, 2014 at 07:11:50 (UTC)
Goto Top
Hach du bist einfach ... face-smile


Gruß
Member: colinardo
colinardo Jun 12, 2014 updated at 07:40:39 (UTC)
Goto Top
Zitat von @Xaero1982:
spuckt mir nicht das gewünschte aus - nämlich nix :/ Jemand eine Idee?
dir fehlt hier noch die Funktion zur Umwandlung des WMI-Datums(UTC) WMIDateStringToDate():
http://gallery.technet.microsoft.com/scriptcenter/03a18f58-0e13-47d1-88 ...
Function WMIDateStringToDate(wmiDate) 
    WMIDateStringToDate = CDate(Mid(wmiDate, 5, 2) & "/" & _   
        Mid(wmiDate, 7, 2) & "/" & Left(wmiDate, 4) _   
            & " " & Mid (wmiDate, 9, 2) & ":" & _   
                Mid(wmiDate, 11, 2) & ":" & Mid(wmiDate, _   
                    13, 2)) 
End Function
Und zum testen mal das On Error Resume Next rausnehmen, dann meldet sich das Script wenn Fehler auftauchen, fürs Debugging von Vorteil face-wink

Zum Löschen des Eventlogs kannst du mit VBS dann noch das hier hernehmen:
'Clear Security Eventlog  
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,(Backup)}!\\.\root\cimv2")  
Set colLogFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile where LogFileName='Security'")  

For Each objLogfile in colLogFiles
        objLogFile.ClearEventLog()
Next
Grüße Uwe
Member: Xaero1982
Xaero1982 Jun 30, 2014 at 19:52:00 (UTC)
Goto Top
Also das mit dem Powershellscript haut irgendwie nicht so hin. Die Daten die im Eventlog stehen sind andere als die Log hergibt...

Ich bekomme leider keinen Usernamen raus der im Eventlog vorhanden ist... sondern offenbar nur die ID. Auch nicht auf welche Datei zugegriffen wurde...

Gruß
Member: colinardo
colinardo Jun 30, 2014 at 20:10:33 (UTC)
Goto Top
Zitat von @Xaero1982:
Also das mit dem Powershellscript haut irgendwie nicht so hin. Die Daten die im Eventlog stehen sind andere als die Log
hergibt...
Kann ich nicht feststellen!
Ich bekomme leider keinen Usernamen raus der im Eventlog vorhanden ist... sondern offenbar nur die ID. Auch nicht auf welche Datei
zugegriffen wurde...
Dazu musst du wie oben verlinkt mit XPath Filtern und dann den Namen und Datei aus dem Message-Body extrahieren. Melde mich morgen nochmal...

Heut is Ende Gelände face-smile

Schönen Abend
Uwe