Aug 132008
 

获得本地系统的eventlog直接用Get-EventLog这个CMDlet就可以了。获取远程事件日志就没有现成的CMDlet了,Powershell 2.0的Remoting可以实现,不过这里要讲在1.0里面的方法,自然是要利用.netFramework那无所不包的类库来实现了。用这个class — System.Diagnostics.EventLog。

命令很简单:

$MyEvtLog = New-Object System.Diagnostics.EventLog("Logname", "Servername")

其中Logname是要取得的日志的名字,类似Application/Security/System这样的名字,而Servername自然就是要连接的远程机器的名字了。

然后就可以通过折腾$MyEvtLog这个变量来取得自己所要的数据了。最简单的用法:

$MyEvtLog.Entries

这个是输出所有Log项。一般来说不会有人想看到这么多的输出,所以用:

$MyEvtLog.Entries| select-object –last 50

 

这个是输出最后50条,因为默认是按照index排序,所以恰好输出的就是最近的50条。

还可以用where来设置过滤条件:

$event.Entries| where {$_.Source -eq "Perflib"}

这个就是过滤出事件源是Perflib的日志,其它条件也都可以用,比如Time、Type、Source、EventID,甚至是message本身。

最后来个Tip,取System这个log,EventID为6005的日志,能拿到系统Reboot的时间的List。

(New-Object System.Diagnostics.EventLog("System", "RemoteServer")).Entries | where {$_.EventID –eq 6005}

 

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>