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

Datei auslesen mit wert aus einer liste vergleichen und wegschreiben

Frage Entwicklung Batch & Shell

Mitglied: obacht

obacht (Level 1) - Jetzt verbinden

19.03.2012, aktualisiert 25.03.2012, 2994 Aufrufe, 7 Kommentare

Hallo zusammen,
ich versuche zeilenweise aus eine Datei die im Zugriff durch eine DB ist den letzten Eintag auszulesen und mit den Werten in suche-1 zu vergleichen, bei übereinstimmung die ganze Zeile in eine Datei zuschreiben. Sollte ich nicht lieber mit dem diesen Befehl bei einer geöffnet Datei arebiten , wenn die Datei bereits im Zugriff ist?

OpenAsTextStream([IOMode As IOMode = ForReading], [Format As Tristate = TristateFalse]) As Textstream

Grüße

01.
# Start-FileSystemWatcher der Powershell  
02.
import-module FileSystem 
03.
get-help Start-FileSystemWatcher  
04.
 
05.
set suche-1= (importfile; exportfile; DB02; error;) 
06.
 
07.
# String durchsuchen 
08.
$Pattern="suche1" 
09.
$LineCounter=0 
10.
$NumberOfLines=$(get-content -path "D:\db02.log").count 
11.
 
12.
Get-Content -path "D:\db02.log" -Wait | ForEach{ 
13.
 $LineCounter+=1 
14.
 If(($_ -match $Pattern) -and ($Linecounter -gt $NumberOfLines)){ 
15.
  
16.
Set-Content "d:\tag_meldungen.txt" -Value "$_"  
17.
 # in Datei schreiben 
18.
19.
}
[Edit Biber] Codeformatierung [/Edit]
Mitglied: 5t8d1e
20.03.2012 um 12:01 Uhr
Hallo,

also wenn ich es richtig verstanden habe suchst du ungefähr sowas:
01.
$pattern = "suche1" 
02.
get-content -wait D:\db02.log | where { $_ -match $pattern } | out-file -append d:\tag_meldungen.txt
wie immer bei mir quick and dirty

grüße
Torsten
Bitte warten ..
Mitglied: obacht
20.03.2012 um 21:29 Uhr
Hallo Thorsten,
diese Lösung ist besser als das was ich bisher habe, meine Lösung ist drei mal so lang werde mich an deiner Lösung orientieren.

Ich hänge aber gerader an einer anderen Stelle und zwar möchte ich den String in eine dynamisches Array einlesen und das 3 Arrayfeld (3 Absatz in der Zeile) mit einer Fehlerliste vergleichen.
In etwas so:

$pattern = "C:/Liste.txt" # Eine Liste mit diversen Fehlercodes und evenID siehe Beispiel unten
$Event_ID=" "
$Event_ID=" "

get-content -wait D:\db02.log | where { $_ -match $pattern } While ($StreamReader.Endofstream -eq $False){
$Line=$StreamReader.ReadLine( Write-Eventlog -logname 'DB02' -source 'work' -eventID $Event_ID -EntryType $_EntryType -message "$Line" )
}

Der Eintrag soll dann im Eventlog DB02 unter Windows zu finden sein.. leider schaffe ich es nicht den String richtig zu erzeugen / übergeben um im Array das 3 Feld mit der Liste vergleichen zu können. Was mach ich falsch?

Beispiel für die Fehlercode Liste in C./Liste.txt die je Treffer in die Variablen geschrieben werden ($Event_ID=" "; $Event_ID=" ")
ERRORCODE EventID EntryType
1. aeg45244S; 1252; error
2. jhhff56616L; 1000; warning
3. 456sgsv55K 2011 error
usw.
Bitte warten ..
Mitglied: 5t8d1e
21.03.2012 um 10:38 Uhr
ahoi,

Leider komme ich nicht mit deiner Erklärung nicht ganz klar. am besten schickst du mal 3-4 zeilen aus deinen logfile und 3-4 zeilen aus deiner Fehlercodeliste.
Und damit ich weiss wie das Ergebnis aussehen auch hier 1-2 Beispiele. Danach schauen wir mal was daraus gebastelt werden kann.

der Torsten ohne 'h'
Bitte warten ..
Mitglied: obacht
21.03.2012 um 15:21 Uhr
Ziel ist es das Log DB02.log in Echtzeit zu überwachen:

DB02.log Logdatei sieht so aus:
z.B.

22/03/2012 11:00:18 00255B313I Server is up
22/03/2012 11:00:18 045688G52I Object loaded.
23/03/2012 11:10:22 001CM027E Error. Cluster NGZ04
23/03/2012 11:42:22 0055TS528E Authentication failure from Printstation: 192.168.110.1
(Fehlercode)

Jeder Logeintrag der in das DB02.log geschrieben wird soll sofort auf Fehlercode, welcher in der Fehlematrix hinterlegt ist geprüft werden.


Fehlermatrix:

Fehlercode; EventID; Aktion (bei 1 wir ins Eventlog geschrieben bei 0 wird kein Eintrag geschrieben und der String verworfen.)

00255B313I; 0; 0
021CD02PW; 0; 0
001CM027E ; 9993; 1

Bei 1 wir ins Eventlog geschrieben bei 0 wird kein Eintrag geschrieben und der String verworfen.)

Kommt der Fehlercode in der Fehlermatrix vor und ist mit der 1 im dritten Feld gekennzeichnet, nur dann schreibe einen Eintrag in das Applikation-Eventlog von Microsoft Server.

Der Logeintrag soll die EvntID aus der Fehlermatrix enthalten und als Message den gesamten String (z. B. - 23/03/2012 11:10:22 001CM027E Error. Cluster NGZ04) enthalten.

Falls du noch weiter Informationen brauchst bitte melden.
Viele Grüße
Bitte warten ..
Mitglied: 5t8d1e
23.03.2012 um 08:55 Uhr
Ahoi obacht,


ich gugge mir das mal am WE an und dann schauen wir mal was bei rum.

Ansonsten Happy WE

der Torsten
Bitte warten ..
Mitglied: 5t8d1e
24.03.2012 um 18:11 Uhr
Ich bins wieder!

so das hier sollte funkitionieren
den Debugbereich kannst auskommentieren und das Script direkt mit den Parametern aufrufen

Bsp.: .\get-db2errors.ps1 -Fehlerliste .\known-errors.csv -DB2log .\db2.log -outfile .\errors.log

01.
Param ( 
02.
[string]$Fehlerliste, 
03.
[string]$DB2log, 
04.
[string]$outfile 
05.
06.
 
07.
###Debug### 
08.
[string]$Fehlerliste = "E:\tmp\get-DB2Errors\known-errors.csv" 
09.
[string]$DB2log = "E:\tmp\get-DB2Errors\db2.log" 
10.
[string]$outfile = "E:\tmp\get-DB2Errors\errors.log" 
11.
########### 
12.
 
13.
#import Fehlerliste 
14.
[array]$knownErrors = Import-Csv $Fehlerliste -Delimiter ";" 
15.
 
16.
Get-Content $db2log -wait | Foreach {  
17.
    $DB2Logerror = ($_.split(' '))[2] 
18.
    #$DB2Logerror 
19.
    $mymatch = $knownErrors -match $DB2Logerror | select Aktion 
20.
    if ($mymatch.Aktion -eq 1) { $_ | Out-File -FilePath $outfile -Append} 
21.
}
und nun ab ins WE
der Torsten

ps.: die csv sollte wie folgt aussehen
01.
Fehlercode;EventID;Aktion 
02.
00255B313I;0;0 
03.
021CD02PW;0;0 
04.
001CM027E;9993;1
Bitte warten ..
Mitglied: obacht
30.03.2012 um 12:23 Uhr
Hallo Torsten,
ich konnte mich leider nicht früher melden, die Lösung hat mir sehr geholfen, Danke.

Aktuell kämpfe ich mit folgender Fehlermeldung in der PS:

Write-EventLog : Cannot bind parameter 'EntryType'. Cannot convert value "C" to type "System.Diagnostics.EventLogEntryT
ype". Error: "Invalid cast from 'System.Char' to 'System.Diagnostics.EventLogEntryType'."


Meine Fehlermatrix.csv sieht so aus:
Fehlercode;EventID;EntryType;Aktion
VEP0501CE;VEP0501CE;Warning;1

Ich wollte den Fehlercode im Eventlog als EventID angeben.

welche Art von Platzhalter brauche ich bei dem Befehl Write-EventLog ?

Viele Grüße
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

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

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull 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
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...