用 Perl 讀 Windows 的 EventLog





bx2aa
2004-03-22, 04:48 PM
#! c:\perl\bin\perl.exe -w
use Win32::EventLog;
%type =(1 => 'ERROR',
2 => 'WARNING',
4 => 'INFORMATION',
8 => 'AUDIT_SUCCESS',
16=> 'AUDIT_FAILURE');
open(EVENTLOG,">EVENTLOG.TXT");
$log = new Win32::EventLog("System") or die "Unable to open system log:$^E\n";
while ($log->Read((EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ), 1,$entry)) {
Win32::EventLog::GetMessageText($entry);
print EVENTLOG scalar localtime($entry->{TimeGenerated})." ";
print EVENTLOG $entry->{Computer}."[".($entry->{EventID} & 0xffff)."] ";
print EVENTLOG $entry->{Source}.":".$type{$entry->{EventType}};
print EVENTLOG $entry->{Message};
}
$log->Clear(FILENAME);
close(EVENTLOG);
__END__

C:\Documents and Settings\BX2AA\perl>perl eventlog.pl
以下擷取 EVENTLOG.TXT 檔中的一些訊息
Sun Mar 14 20:31:04 2004 AMATEUR-RADIO[1001] SNMP:INFORMATIONSNMP 服務已經順利啟動。

Sun Mar 14 20:31:55 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONSSDP Discovery Service 服務已進入 執行中 狀態。

Sun Mar 14 20:31:55 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONNetwork Location Awareness (NLA) 服務已進入 執行中 狀態。

Sun Mar 14 21:25:46 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONIMAPI CD-Burning COM Service 服務已進入 停止 狀態。

Sun Mar 14 21:33:24 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONIMAPI CD-Burning COM Service 服務已成功地傳送一個 開始 控制。

Sun Mar 14 21:47:58 2004 AMATEUR-RADIO[6009] EventLog:INFORMATIONMicrosoft (R) Windows (R) 5.01. 2600 Uniprocessor Free.

Mon Mar 15 13:45:46 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONTerminal Services 服務已成功地傳送一個 開始 控制。

Mon Mar 15 13:45:46 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONFast User Switching Compatibility 服務已進入 執行中 狀態。

Mon Mar 15 13:45:46 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONIMAPI CD-Burning COM Service 服務已進入 停止 狀態。

Mon Mar 15 14:05:10 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONCLPCIID 服務已成功地傳送一個 開始 控制。

Mon Mar 15 14:09:57 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONIMAPI CD-Burning COM Service 服務已進入 停止 狀態。

Mon Mar 15 18:51:07 2004 AMATEUR-RADIO[6009] EventLog:INFORMATIONMicrosoft (R) Windows (R) 5.01. 2600 Uniprocessor Free.

Mon Mar 15 18:52:41 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONIMAPI CD-Burning COM Service 服務已進入 執行中 狀態。

Mon Mar 15 18:52:41 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONNetwork Location Awareness (NLA) 服務已成功地傳送一個 開始 控制。

Mon Mar 15 18:52:41 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONRemote Access Auto Connection Manager 服務已進入 執行中 狀態。

Mon Mar 15 20:17:43 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONIMAPI CD-Burning COM Service 服務已成功地傳送一個 開始 控制。

Mon Mar 15 20:17:43 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONFast User Switching Compatibility 服務已進入 執行中 狀態。

Mon Mar 15 20:17:43 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONRemote Access Connection Manager 服務已進入 執行中 狀態。

Tue Mar 16 11:05:54 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONNetwork Connections 服務已成功地傳送一個 開始 控制。

Tue Mar 16 11:05:54 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONNetwork Location Awareness (NLA) 服務已成功地傳送一個 開始 控制。

Tue Mar 16 11:05:54 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONRemote Access Auto Connection Manager 服務已成功地傳送一個 開始 控制。

Tue Mar 16 19:04:14 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONNetwork Connections 服務已成功地傳送一個 開始 控制。

Tue Mar 16 19:04:14 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONIMAPI CD-Burning COM Service 服務已進入 執行中 狀態。

Tue Mar 16 19:04:14 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONRemote Access Auto Connection Manager 服務已成功地傳送一個 開始 控制。

Tue Mar 16 23:06:08 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONFast User Switching Compatibility 服務已成功地傳送一個 開始 控制。

Tue Mar 16 23:06:08 2004 AMATEUR-RADIO[7036] Service Control Manager:INFORMATIONIMAPI CD-Burning COM Service 服務已進入 執行中 狀態。

Tue Mar 16 23:06:08 2004 AMATEUR-RADIO[7035] Service Control Manager:INFORMATIONRemote Access Auto Connection Manager 服務已成功地傳送一個 開始 控制。




bx2aa
2004-03-22, 04:50 PM
#! c:\perl\bin\perl.exe -w
use Win32::EventLog;

my %event=('Length',NULL,
'RecordNumber',NULL,
'TimeGenerated',NULL,
'TimeWritten',NULL,
'EventID',NULL,
'EventType',NULL,
'Category',NULL,
'ClosingRecordNumber',NULL,
'Source',NULL,
'Computer',NULL,
'Strings',NULL,
'Data',NULL,);

# partial list of event types, i.e., Type 1 is "Error",
# 2 is "Warning", etc.
@types = ("","Error","Warning","","Information");

Win32::EventLog::Open($EventLog,'System','') or die "Could not open System log:$^E\n";

$EventLog->Win32::EventLog::GetNumber($numevents);
$EventLog->Win32::EventLog::GetOldest($oldestevent);

$EventLog->Win32::EventLog::Read((EVENTLOG_SEEK_READ |
EVENTLOG_FORWARDS_READ),
$numevents + $oldestevent, $event);

# loop through all of the events, recording the number of
# Source and EventTypes
for ($i=0;$i<$numevents;$i++) {
$EventLog->Read((EVENTLOG_SEQUENTIAL_READ |
EVENTLOG_FORWARDS_READ),
0, $event);
$source{$event->{Source}}++;
$types{$event->{EventType}}++;
}

# now print out the totals
print "-->Event Log Source Totals:\n";
for (sort keys %source) {
print "$_: $source{$_}\n";
}
print "-"x30,"\n";
print "-->Event Log Type Totals:\n";
for (sort keys %types) {
print "$types[$_]: $types{$_}\n";
}
print "-"x30,"\n";
print "Total number of events: $numevents\n";

__END__


C:\Documents and Settings\BX2AA\perl>perl event.pl
-->Event Log Source Totals:
Application Popup: 10
BROWSER: 2
EventLog: 152
LPDSVC: 1
SNMP: 40
SRService: 2
Save Dump: 1
Service Control Manager: 1132
System Error: 1
USER32: 15
W32Time: 482
Windows File Protection: 1
atapi: 2
sr: 1
------------------------------
-->Event Log Type Totals:
Error: 484
Warning: 17
Information: 1341
------------------------------
Total number of events: 1842

C:\Documents and Settings\BX2AA\perl>