Leser: 23
QuoteError: Case mismatch between module and file name
Windows uses case-insensitive filesystems. It is often possible to misspell a module name and still have Perl load the correct file. For example:
use Win32::Eventlog;
...loads the Win32::EventLog module, but it does not import any symbols from it: Perl tries to call the Win32::Eventlog->import() method, which doesn't exist, and gives up. PerlSvc on Windows generates an error when the file name and the module name cases don't match:
Win32\Eventlog.pm:
error: Case mismatch between module and file name
file: C:\perl\site\lib\Win32\EventLog.pm
auto\Win32\Eventlog\Eventlog.dll:
error: Case mismatch between module and file name
file: C:\perl\site\lib\auto\Win32\EventLog\EventLog.dll
http://docs.activestate.com/pdk/9.0/PerlSvc.html
2010-06-25T07:15:38 LukeStrikerARRR PERL hat mich grade deftig im Stich gelassen! Meine Script welches via Perl2exe umgewandelt wird in eine .exe kann ich nicht auf den Serveren ausführen.
2010-06-25T07:15:38 LukeStrikerHat jemand ein anderes Script (Egal welcher Sprache(ob vbs, .NET etc) was .evt-Dateien in .txt Dateien "umwandeln" kann???
2010-06-25T07:51:04 bianca2010-06-25T07:15:38 LukeStrikerHat jemand ein anderes Script (Egal welcher Sprache(ob vbs, .NET etc) was .evt-Dateien in .txt Dateien "umwandeln" kann???
Was sind das denn für Dateien? Was genau muss da "umgewandelt" werden?
2010-06-25T07:28:09 reneeDas ist kein Bug von Perl sondern eher eines von Windows...
2010-06-25T08:00:44 LukeStrikerWerde das jetzt mit .NET umsetzten...
2010-06-25T08:06:30 bianca2010-06-25T08:00:44 LukeStrikerWerde das jetzt mit .NET umsetzten...
Wenn Du da auch Modulnamen falsch schreibst, wird das auch mit .NET nichts werden....
Das Log in EventLog wird mit großem L geschrieben.
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
use Win32::EventLog; use Win32::Security::SID; my $server = shift; my $path = shift; my $einDate= shift; my $eventlogtyp =shift; my($log) = @_; my ($evt,$total,$oldest,$evtHashRef); my $start = 0; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst); my $sl = 0; #stringlänge; my $evtDate; my $nl = 0; my($filename)=$server."_".$eventlogtyp.'_'.$einDate; $evt = Win32::EventLog->new($path) || die "Could not open $log log on $server: $!\n"; $evt->GetNumber($total) || die "Can't get number of EventLog records: $!\n"; $evt->GetOldest($oldest) || die "Can't get number of oldest EventLog record: $!\n"; open(file, ">E:\\Share\\logs\\events\\\\$filename.txt") or die "$!\n"; print file "Typ\t\tDatum Zeit\tQuelle\t\t\tKategorie\tEreignis\tBenutzer\t\t\tComputer\tFehlermeldung\n"; close (file); $|=1; print "$start\t$total\n"; while ($start < $total) { #print "."; $evt->Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,$oldest+$start,$evtHashRef) || die "Can't read EventLog entry #$start\n"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= localtime(${$evtHashRef}{TimeGenerated}); $evtDate = "$mday.".($mon+1).".".($year+1900); if ($evtDate == $einDate) { print "$evtDate "; open(file, ">>E:\\Share\\logs\\events\\\\$filename.txt"); #1. EventType = 0,'Error',2,'Warning',4,'Information',8,'Audit success',16,'Audit failure' if (${$evtHashRef}{EventType} == 1) { print file "Fehler\t\t"; } elsif (${$evtHashRef}{EventType} == 2) { print file "Warning\t\t"; } elsif (${$evtHashRef}{EventType} == 4) { print file "Information\t"; } elsif (${$evtHashRef}{EventType} == 8) { print file "Überprüfung erfolgreich\t"; } elsif (${$evtHashRef}{EventType} == 16) { print file "Fehler bei der Überprüfung\t"; } else { print file "Fehlertyp: ${$evtHashRef}{EventType}\t"; } #2. Conversion of the date ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= localtime(${$evtHashRef}{TimeGenerated}); #2. Date print file "$mday.".($mon+1).".".($year+1900)." "; #print "$mday.".($mon+1).".".($year+1900)." "; #3. Time print file "$hour:$min:$sec\t"; #print "$hour:$min:$sec\t"; #4. Scource $sl=length(${$evtHashRef}{Source}); if ($sl < 7) { print file "${$evtHashRef}{Source} \t\t\t"; } elsif($sl < 16) { print file "${$evtHashRef}{Source} \t\t"; } else { print file "${$evtHashRef}{Source} "; } #5.Category if (${$evtHashRef}{Category} == 0) { print file "Keine \t\t" } else {print file "${$evtHashRef}{Category} \t\t"; } #6. EventID my $id = (${$evtHashRef}{EventID} & 0xffff); print file "$id \t\t"; #7. User & SID convert to username my $name = Win32::Security::SID::ConvertSidToName(${$evtHashRef}{User}); if ($name eq 'UNDEFINED_SID') {$name = "nicht zutreffend" } #same as Scource $nl=length($name); if ($nl < 7) { print file "$name \t\t\t\t";} elsif($nl < 16) { print file "$name \t\t\t";} elsif($nl < 22) { print file "$name \t\t";} else { print file"$name \t";} #8. Computer print file "${$evtHashRef}{Computer} \t"; #9. Massage Win32::EventLog::GetMessageText($evtHashRef); my $msg = $evtHashRef->{Message}; print file "$msg"; } print file "\n"; close (file); $start++; }
2010-06-25T11:21:59 esskarscript ist ja wohl unvollständig
2010-06-25T11:44:27 pqshift nimmt als default-parameter @ARGV, wenn es ausserhalb von subs aufgerufen wird.
2010-06-25T11:22:29 biancaSag doch mal, was der wirkliche Fehler auf dem Server ist.
Dein gepostetes Beispiel ist es ja anscheinend nicht.
2010-06-25T12:51:13 LukeStriker.NET macht Schwierigkeiten, will die Logfiles nicht mehr aus Windows\system32\config löschen
2010-06-25T13:05:46 esskarC:\perl2exe>win32log.exe
Can't get number of EventLog records:
2010-06-25T13:09:12 esskarjo. so schlau bin ich auch.
es ging aber nur ums erstellen der exe
QuoteDer Fehler tritt auf wenn ich den Code(oben) in Perl2exe kompiliere.
QuoteMeine Script welches via Perl2exe umgewandelt wird in eine .exe kann ich nicht auf den Serveren ausführen.
2010-06-25T13:14:13 biancaHast Recht, er weiß es vlt. selbst nicht. Eingangs schrieb er
QuoteMeine Script welches via Perl2exe umgewandelt wird in eine .exe kann ich nicht auf den Serveren ausführen.
:))
Zu warm draußen :))
1
2
3
4
5
Can't find 'boot_Win32__EventLog' symbol in C:\WINDOWS\system32/EventLog.dll
at C:\WINDOWS\system32\newserver.exe line 1
Compilation failed in require at C:\WINDOWS\system32\newserver.exe line 1.
BEGIN failed--compilation aborted at C:\WINDOWS\system32\newserver.exe line 1.
newserver.exe exited on Server1-1 with error code 2.
2010-06-25T13:32:42 LukeStrikerCode: (dl )Can't find 'boot_Win32__EventLog' symbol in C:\WINDOWS\system32/EventLog.dll
2010-06-25T13:39:10 bianca2010-06-25T13:32:42 LukeStrikerCode: (dl )Can't find 'boot_Win32__EventLog' symbol in C:\WINDOWS\system32/EventLog.dll
Hast Du geprüft, ob das Perlmodul mit dem Ziel Windows System kompatibel ist (Windows Version und SP-Stand)?
Edit: Oder hast Du ein Berechtigungsproblem, dass dazu führt, dass Deine exe Teile dieser DLL garnicht laden darf, weil die DLL nicht lesend geöffnet werden darf? Verzeichnisberechtigung/Domäne/Datei?
2010-06-25T13:49:31 LukeStrikerIch meine es gibt ja gar keine "EventLog.dll" sondern nur eine "eventlog.dll"...-> daher dachte ich Modulfehler...
2010-06-25T13:57:03 bianca2010-06-25T13:49:31 LukeStrikerIch meine es gibt ja gar keine "EventLog.dll" sondern nur eine "eventlog.dll"...-> daher dachte ich Modulfehler...
Aber das muss doch unter Windows sch....egal sein. Verstehe ich jetzt auch nicht so ganz.
Kannst Du die DLL denn nur mal temporär in groß und klein umbenennen?
2010-06-25T13:59:36 LukeStrikerFunktioniert...
2010-06-25T14:00:19 esskargenaues betriebssystem bitte.
2010-06-25T14:47:02 esskarwo legst du denn die exe ab?
in windows\system32 ?
wenn ja, leg sie mal auf c:\test
und starte sie auf dem server (also per remotedesktop) nicht mit psexec
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
c:\>dir eventlog.dll /s
Datenträger in Laufwerk C: ist Partition 1
Volumeseriennummer: XXXX-YYYY
Verzeichnis von c:\strawberry\perl\vendor\lib\auto\Win32\EventLog
28.01.2010 00:52 24.576 EventLog.dll
1 Datei(en) 24.576 Bytes
Verzeichnis von c:\WINDOWS\$NtServicePackUninstall$
02.04.2003 14:00 49.152 eventlog.dll
1 Datei(en) 49.152 Bytes
Verzeichnis von c:\WINDOWS\ServicePackFiles\i386
14.04.2008 08:52 56.320 eventlog.dll
1 Datei(en) 56.320 Bytes
Verzeichnis von c:\WINDOWS\system32
14.04.2008 08:52 56.320 eventlog.dll
1 Datei(en) 56.320 Bytes
Anzahl der angezeigten Dateien:
[blabla]
2010-06-25T15:25:17 biancaDas paßt 100 %, was esskar schreibt.
Beispiel von meinem XP (als Anhaltspunkt für Dich, Luke):
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
26c:\>dir eventlog.dll /s
Datenträger in Laufwerk C: ist Partition 1
Volumeseriennummer: XXXX-YYYY
Verzeichnis von c:\strawberry\perl\vendor\lib\auto\Win32\EventLog
28.01.2010 00:52 24.576 EventLog.dll
1 Datei(en) 24.576 Bytes
Verzeichnis von c:\WINDOWS\$NtServicePackUninstall$
02.04.2003 14:00 49.152 eventlog.dll
1 Datei(en) 49.152 Bytes
Verzeichnis von c:\WINDOWS\ServicePackFiles\i386
14.04.2008 08:52 56.320 eventlog.dll
1 Datei(en) 56.320 Bytes
Verzeichnis von c:\WINDOWS\system32
14.04.2008 08:52 56.320 eventlog.dll
1 Datei(en) 56.320 Bytes
Anzahl der angezeigten Dateien:
[blabla]
Die für Perl benötigte ist groß und klein geschrieben und liegt im Perl Verzeichnis. Das ist definitiv eine andere als die im Windows Ordner.
2010-06-25T13:14:13 biancaHast Recht, er weiß es vlt. selbst nicht. Eingangs schrieb er
QuoteMeine Script welches via Perl2exe umgewandelt wird in eine .exe kann ich nicht auf den Serveren ausführen.
:))
Zu warm draußen :))
if ($evtDate == $einDate) {
2010-06-25T13:22:09 GwenDragonZeile 32 ist wohl nicht so gemeint!
Code (perl): (dl )if ($evtDate == $einDate) {
denn mindestens eine der Variablen ist garantiert keine Zahl sondern eine Zeichenkette.
Zeichenketten lassen sich nur mit eq vergleichen.
2010-06-25T13:22:58 GwenDragonWarum perl2exe? Gibt es einen bestimmten Grund dafür?
2010-06-25T13:35:49 LukeStrikerAuf den Servern ist kein Perl und soll auch keins hin...
2010-06-25T13:37:11 bianca2010-06-25T13:35:49 LukeStrikerAuf den Servern ist kein Perl und soll auch keins hin...
Sie meint, warum es dieses Produkt sein muss. Es gibt noch mehr Tools, womit man aus einem Perlscript eine exe machen kann.