Thread Win32::EventLog::GetMessageText - Message leer (4 answers)
Opened by manfred.roehring at 2011-02-15 12:03

manfred.roehring
 2011-02-15 12:03
#145664 #145664
User since
2011-02-15
3 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte die Windows Ereignisanzeige unter Windows 2003 Server auswerten (Fehler + Warnhinweise).
Leider ist die Message unter Windows 2003 leer bzw. es wird folgende Fehlermeldung ausgeben:
Use of uninitialized value in concatenation (.) or string at ev_log.pl line 25.
Unter Windows XP funktioniert das gleiche Skript. Beispielausgabe:
LAPTOPRMA2010
Aktuelle Zeit ist: 20110215
Der Dienst "Sophos Agent" wurde unerwartet beendet. Dies ist bereits 1 Mal vorge
kommen. Folgende Korrekturmassnahmen werden in 60000 Millisekunden durchgef³hrt:
Starten Sie den Dienst neu..

Verwendete Perl-Version ist: "This is perl, v5.8.8 built for MSWin32-x86-multi-thread"
Windows-Version: Microsoft Windows Server 2003 R2 - Standard x64 Edition - Service-Pack 2



Ich wäre für einen Tipp bzw. über Hilfe dankbar.

Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use Win32::EventLog;

open (EL,">eventlog.txt");

$handle=Win32::EventLog->new("System", $ENV{ComputerName})
or die "Can't open Application EventLog\n";
print "$ENV{ComputerName}\n";
$handle->GetNumber($recs)
or die "Can't get number of EventLog records\n";
$handle->GetOldest($base)
or die "Can't get number of oldest EventLog record\n";
$x = 0;
$aktzeit = &zeit(time,'jmt');
print "Aktuelle Zeit ist: $aktzeit\n";
while ($x < $recs) {
$handle->Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,
$base+$x,
$hashRef)
or die "Can't read EventLog entry #$x\n";
if ($hashRef->{EventType} eq '1' or $hashRef->{EventType} eq '2'){
#print "$hashRef->{EventType}";
$zeit = &zeit($hashRef->{TimeGenerated},'jmt');
#print "$zeit\n";
Win32::EventLog::GetMessageText($hashRef);
print "$hashRef->{Message}\n" if $zeit eq $aktzeit;
}
$x++;
}
close (EL);

sub zeit {
my $sek = shift; # Übergebene Sekunden lesen
my $par = shift; # Parameter lesen
my $zeit; # Parameter Zeit initialisieren
my ($sekunden,$minuten,$stunden,$monatstag,$monat,$jahr,$wochentag,$jahrestag,$sommerzeit) = localtime($sek); # Liste mit Datumswerten erstellen
$monat++;
$jahrestag++;
$jahr+=1900;
$sekunden = &format($sekunden,2);
$minuten = &format($minuten,2);
$stunden = &format($stunden,2);
$monatstag = &format($monatstag,2);
$monat = &format($monat,2);
$jahr = &format($jahr,4);
$jahrestag = &format($jahrestag,3);
if ($par eq 'jmt') { # Zeit mit jahr monat tag aufbereiten
$zeit = $jahr . $monat . $monatstag;
}
if ($par eq 'jm') { # Zeit mit jahr monat aufbereiten
$zeit = $jahr . $monat;
}
return ($zeit);
}

sub format {
my $wert = shift;
my $parameter = shift;
$wert = sprintf("%0${parameter}d",$wert);
return($wert);
}# ende format


22.02.2011 - offenbar werden nur für bestimmte Sources ($hashRef->{Source} keine Texte ausgegeben (z.B. Wins, TermServDevices, usw.). In diesem Fall war aber immer ein String auswertbar ($hashRef->{Strings}. Für meine Bedürfnisse reicht dieser Umstand.
Last edited: 2011-02-22 09:46:21 +0100 (CET)

View full thread Win32::EventLog::GetMessageText - Message leer