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, 3051 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 ..
Ähnliche Inhalte
PHP
gelöst TXT Datei auslesen und bestimmte Zeilen in Variable setzen (11)

Frage von 126594 zum Thema PHP ...

Installation
gelöst Mit Powershell in einer Datei eine Zeile auslesen (6)

Frage von Bommi1961 zum Thema Installation ...

Neue Wissensbeiträge
Windows Tools

Zeit für Energiesparmodus, Bildschirmabschaltung etc. schnell anpassen

Anleitung von hannsgmaulwurf zum Thema Windows Tools ...

Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(4)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Heiß diskutierte Inhalte
Microsoft Office
Office Druck fehler (18)

Frage von DaistwasimBusch zum Thema Microsoft Office ...

Windows Server
Zertifikat am DC erneuern funktioniert nicht (13)

Frage von takvorian zum Thema Windows Server ...