Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Werte aus txt Datei auslesen in jeder Zeile

Frage Entwicklung VB for Applications

Mitglied: BBfreak

BBfreak (Level 1) - Jetzt verbinden

28.08.2012, aktualisiert 21:06 Uhr, 3022 Aufrufe, 7 Kommentare

Hallo zusammen,

ich bin recht unbewandert mit vbs-Scripten.

Ich hab ein Log wo Gruppenänderungen reingeschrieben werden.

Format:
2012-08-27 08:52:37 Ein Mitglied einer sicherheitsaktivierten lokalen Gruppe wurde hinzugefügt. Antragsteller: Sicherheits-ID: S-1-5-21-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxx Kontoname: USER1 Kontodomäne: DOMAENE Anmelde-ID: 0x9c0xxx2 Mitglied: Sicherheits-ID: S-1-5-21-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxx Kontoname: CN=OUNAME,OU=UEBEROU,OU=Gruppen,OU=bla,DC=DOMAENE,DC=local Gruppe: Sicherheits-ID: S-1-5-21-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxx Gruppenname: GRUPPENNAME Gruppendomäne: DOMAENE Weitere Informationen: Berechtigungen: - 
Das ist ansich das Log von Windows-Security wenn nen User hinzugefügt oder gelöscht wird.

Darauf brauch ich aber nur vier Werte die ich dann in ne mysql packen möchte.

Datum+Uhrzeit (im Beispiel 2012-08-27)
Kontoname (im Beispiel: USER1)
Kontoname (im Beispiel: CN=OUNAME,OU=UEBEROU,OU=Gruppen,OU=bla,DC=DOMAENE,DC=local)
Gruppenname (im Beispiel: GRUPPENNAME)


Das Log hat je nach der Anzahl von Änderungen mal mehr und mal weniger Einträge.

Die Datum+Uhrzeit Einträge sind immer 19 Zeichen lang. Das sind die ersten 19 Zeichen pro Zeile. Danach kommt aber erstmal der unnötige Text bis zweimal die gleichen Kontoname: Einträge kommen die mich interessieren.

Ist das überhaupt machbar mit nem vbs-Script?

Als Test wollte ich die vier Werte komma(Symicolon)getrennt in ne neue Datei schreiben.

Kann/Mag mir da jemand bei helfen?

Vielen Dank!

Pat

[Edit Biber] Nachgecodetagged [/Edit]
Mitglied: BBfreak
28.08.2012 um 17:33 Uhr
01.
 
02.
 Option Explicit   
03.
 Dim oFSO, sFile, oFile, sText   
04.
 Set oFSO = CreateObject("Scripting.FileSystemObject")   
05.
 sFile = "report.txt" 
06.
 
07.
 If oFSO.FileExists(sFile) Then   
08.
 
09.
  Set oFile = oFSO.OpenTextFile(sFile, 1)   
10.
 
11.
   Do While Not oFile.AtEndOfStream   
12.
 
13.
   sText = oFile.ReadLine   
14.
 
15.
     If Trim(sText) <> "" Then   
16.
 
17.
      WScript.echo(Left(sText,19)) 'Ausgabe Datum 
18.
 
19.
     End If   
20.
 
21.
   Loop   
22.
  oFile.Close   
23.
 
24.
 Else   
25.
  WScript.Echo "ACHTUNG! Datei nicht vorhanden!"   
26.
 End If  
27.
 
So hab ich nun schon das Datum rausbekommen. Nur wie komme ich an die anderen Werte?
Bitte warten ..
Mitglied: bastla
28.08.2012, aktualisiert um 18:27 Uhr
Hallo BBfreak!

Stellt Dein "Format"-Beispiel (BTW: Formatiere das bitte ebenfalls als "Code"!) nur eine einzige Zeile dar, und gibt es in der "report.txt" mehrere solcher Zeilen?

[Edit] Ich nehm's mal an - dann etwa so:
01.
Set oFSO = CreateObject("Scripting.FileSystemObject")   
02.
sInFile = "D:\report.txt" 
03.
sOutFile = "D:\data.csv" 
04.
sDelim = ";" 
05.
 
06.
If Not oFSO.FileExists(sInFile) Then 
07.
    WScript.Echo "ACHTUNG! Datei nicht vorhanden!"   
08.
End If 
09.
 
10.
Lines = Split(oFSO.OpenTextFile(sInFile).ReadAll, vbNewLine) 'alle Zeilen in Array Lines einlesen 
11.
 
12.
Set rE = New RegExp 
13.
For Each Line In Lines 
14.
    sDatum = Left(Line, 19) 
15.
 
16.
    rE.Pattern = "Kontoname: (\S+) Kontodomäne" 
17.
    sKontoname = rE.Execute(Line)(0).SubMatches(0) 
18.
 
19.
    rE.Pattern = "Kontoname: (\S+) Gruppe:" 
20.
    sLDAPPfad = rE.Execute(Line)(0).SubMatches(0) 
21.
 
22.
    rE.Pattern = "Gruppenname: (\S+) Gruppendomäne:" 
23.
    sGruppe = rE.Execute(Line)(0).SubMatches(0) 
24.
 
25.
    LinesOut = LinesOut & vbNewline & sDatum & sDelim & sKontoname &sDelim & sLDAPPfad & sDelim & sGruppe 
26.
Next 
27.
oFSO.CreateTextFile(sOutFile).Write Mid(LinesOut, 3) 'wegen der Zeilenschaltung am Anfang erst ab Char 3 schreiben
Hier solltest Du vielleicht noch vorbeischauen: Microsoft Beefs Up VBScript with Regular Expressions, oder auch da: Reguläre Ausdrücke - und einen hab ich noch: Regular Expressions in VBScript
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: BBfreak
29.08.2012, aktualisiert um 11:47 Uhr
Hallo Bastla,

vielen Dank für deine Hilfe. Auf der Beefs-Up Seite war ich bereits, aber hab bisher nur Expressions gefudnen, die mir den Start der Buchstabenreihe ausgegeben haben. Sprich ich hatte das Ergebniss 64, weil dort "Kontoname" anfing.

Dein Script gibt mir leider ne Error-Meldung:

Zeile: 20
Zeichen: 5
Ungültiger Prozeduraufruf oder ungültiges Argument.
Code: 800A0005

ich habe deine Datei als *.vbs abgespeichert und die Pfade angepasst.
Hast Du ne Idee?


Nachtrag:

2012-08-27 17:08:05 Ein Mitglied einer sicherheitsaktivierten lokalen Gruppe wurde hinzugefügt. Antragsteller: Sicherheits-ID: S-1-5-21-4161370050-3204092196-2192616155-1180 Kontoname: USERANMELDENAMEOHNEFREIZEICHEN Kontodomäne: bla Anmelde-ID: 0xa2340ff Mitglied: Sicherheits-ID: S-1-5-21-4161370050-3204092196-2192616155-1224 Kontoname: CN=VORNAME NACHNAME,OU=bla,OU=bla,DC=denk,DC=bla Gruppe: Sicherheits-ID: S-1-5-21-4161370050-3204092196-2192616155-1546 Gruppenname: GRUPPENNAMEOHNEFREIZEICHEN Gruppendomäne: bla Weitere Informationen: Berechtigungen: -


das Freizeichen bei Vorname Nachname beim zweiten Kontoname ist das Problem.

Kannst du mir noch sagen, wie ich ne if abfrage da mit einbaue? Entweder steht da blabla wurde "hinzugefügt" oder "entfernt". Das würd ich auch gern mitloggen.


Gruß
Pat
Bitte warten ..
Mitglied: bastla
29.08.2012 um 11:41 Uhr
Hallo BBfreak!

Ich habe nur mit der einen oben von Dir geposteten Zeile getestet - das aber erfolgreich (und da die Zeile 17 nicht wirklich anderes macht als die Zeile 20 wäre im Fall des Falles der Fehler eigentlich schon dort zu erwarten) ...

Kannst Du vielleicht Deine Testdaten (als "Code" formatiert) posten?

Grüße
bastla
Bitte warten ..
Mitglied: BBfreak
29.08.2012 um 11:48 Uhr
Hallo Bastla,

ich hab meine Antwort eben nochmal aktualisiert. WEnn ich das Freizeichen zwischen Vor und Nachname wegnehme, klappt die Abfrage wieder. Das Freizeichen ist in der Regal aber immer da, weil man ja Leute in eine Gruppe packt und nicht nur Gruppen (die haben keine Freizeichen bei uns)

Gruß
Pat
Bitte warten ..
Mitglied: bastla
29.08.2012, aktualisiert um 12:30 Uhr
Hallo BBfreak!
WEnn ich das Freizeichen zwischen Vor und Nachname wegnehme, klappt die Abfrage wieder.
Du meinst damit vermutlich ein Leerzeichen - dann musst Du nur die Zeile 19 anpassen, etwa:
rE.Pattern = "Kontoname: \S+.*Kontoname: (.+) Gruppe:"
Für "hinzugefügt" / "entfernt" kannst Du (soferne nur eines davon enthalten sein kann) so vorgehen:
01.
If InStr(Line, "hinzugefügt") >0 Then Aktion = "hinzugefügt" 
02.
If InStr(Line, "entfernt") >0 Then Aktion = "entfernt"
Grüße
bastla
Bitte warten ..
Mitglied: BBfreak
29.08.2012, aktualisiert um 15:37 Uhr
Hallo Bastla,

Das funktioniert 1A!

Hast mich nun angefixed und das erste Buch zum lernen ist bestellt.

Vielen Dank!


Sollte das nochmal wer brauchen, hier mein Endprodukt:


01.
Set oFSO = CreateObject("Scripting.FileSystemObject")   
02.
sInFile = "D:\report.txt" 
03.
sOutFile = "D:\data.csv" 
04.
sDelim = ";" 
05.
 
06.
If Not oFSO.FileExists(sInFile) Then 
07.
    WScript.Echo "ACHTUNG! Datei nicht vorhanden!"   
08.
End If 
09.
 
10.
Lines = Split(oFSO.OpenTextFile(sInFile).ReadAll, vbNewLine) 'alle Zeilen in Array Lines einlesen 
11.
 
12.
Set rE = New RegExp 
13.
For Each Line In Lines 
14.
    sDatum = Left(Line, 19) 
15.
 
16.
     If InStr(Line, "hinzugefügt") >0 Then sAktion = "hinzugefügt"  
17.
     If InStr(Line, "entfernt") >0 Then sAktion = "entfernt" 
18.
 
19.
    rE.Pattern = "Kontoname: (\S+) Kontodomäne" 
20.
    sKontoname = rE.Execute(Line)(0).SubMatches(0) 
21.
 
22.
    rE.Pattern = "Kontoname: \S+.*Kontoname: (.+) Gruppe:"   
23.
    sLDAPPfad = rE.Execute(Line)(0).SubMatches(0) 
24.
 
25.
    rE.Pattern = "Gruppenname: (\S+) Gruppendomäne:" 
26.
    sGruppe = rE.Execute(Line)(0).SubMatches(0) 
27.
 
28.
    LinesOut = LinesOut & vbNewline & sDatum & sDelim & sAktion & sDelim & sKontoname &sDelim & sLDAPPfad & sDelim & sGruppe 
29.
Next 
30.
oFSO.CreateTextFile(sOutFile).Write Mid(LinesOut, 3) 'wegen der Zeilenschaltung am Anfang erst ab Char 3 schreiben
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...