事件日志是操作系统用来保存本身及其他程序信息的工具,本文将会介绍如何通过PowerShell脚本阅读事件日志并创建新的日志条目。Windows系统中包含多种事件日志,在Windows XP系统中包括4种主要的事件日志。即应用程序、系统、安全性及Internet Explorer日志,如图1所示。这样用户可以方便地从系统中提取和查看日志,从而了解系统的当前运行情况。本文将会介绍如何通过PowerShell管理Windows事件日志的方法。
图1 WindowsXP系统的事件日志
1 查看事件日志
在Windows Vista和Windows Server 2008版本中,事件日志的功能能够得到了大量改进和增强。通过使用Get-EventLog cmdlet可以查看事件日志内容,下面是脚本GetEventLogs.ps1的代码:
Get-EventLog –List
该脚本可获取本机中所有事件日志的清单,其中包括每个事件日志的大小、记录数,以及保存和覆盖策略等摘要信息,如图2所示。
图2 事件日志清单
2 读取事件日志
使用Get-EventLog –list查询当前计算机的事件日志后,可以使用Get-EventLog读取相应的日志,其基本形式是将事件日志的名称提供给Get-EventLog cmdlet。GetApplicationEventLog.ps1脚本的代码如下:
Get-EventLog application
运行该脚本显示所选日志的内容,如图3所示。
图3 所选日志的内容
通常操作系统中有大量的系统日志,会显示为多屏。为了获取有用的信息,需要筛选输出内容。
(1)输出到文本文件
创建名为“WriteAppLogToText.ps1”的脚本输出查询结果到日志文本文件中,其代码如下:
Get-EventLog application >C:\PowerShell\Applog.txt
生成的文本文件内容如图4所示,其中保存完整的日志,随后即可查询其中关心的内容。
图4 生成文本文件内容
还可以通过switch语句和正则表达式搜索和提取所需的内容,脚本switchAppTextLog.ps1使用这种方法处理日志,其代码如下:
$AppLog = “C:\PowerShell\Applog.txt” $e=$i=$w=0
Switch –wildcard –file $AppLog{
“*error*” {$e++}
“*info*” {$i++}
“*warn*” {$w++}
}
Write-Output “
$AppLog Contain following:
Errors $e
Warning $w
Information $i
”
执行结果如图5所示。
图5 执行结果
(2)输出到XML文件
将日志导出为XML文件需要使用Export-Clixml,这里使用Get-EventLog cmdlet指定要获取的事件日志的名称,用管道将日志结果传递给Export-Clixml cmdlet。并使用Export-Clixml cmdlet的参数指定保存输出的XML文件路径,路径中包含的文件夹地址必须是现有存在的;否则将会发生错误,如图6所示。
图6 将系统日志输出到XML文件中出错
需要强调的是在Windows Vista和Windows Server 2008中,没有提升权限的用户无法在系统分区根目录中写入文件。在这种情况下,需要具有操作的足够权限才能将日志文件保存在其中。如果要查看程序日志,则不必提升权限。在使用事件查看器(Eventvwr.exe)工具读取安全日志时,需要提升用户账号权限(UAC)。访问安全日志需要安全令牌中包括seSecurityPrivilege特权,默认情况下,只有管理员组的成员可以获得此权限,因此在需要将脚本提升权限后运行。最简单方法是创建一个提升的Windows PowerShell的进程,为此右击后选择快捷菜单中的“运行方式”选项。在打开的对话框中输入管理员账号及密码,即可以管理员身份运行当前的PowerShell进程。
创建名为“WriteAppLogToXml.ps1”的脚本,将日志写入XML文件中,代码如下:
Get-EventLog application | Export-Clixml –Path C:\PowerShell\applog.xml –Depth 2
写入后可以使用Excel打开该文件。需要通过菜单中的“数据”|“XML”|“导入”选项选中其中要导入的文件,从弹出的“导入数据”对话框中选择“现有工作表中的XML列表”选项。随后Excel会用一段时间转换,表格中显示其中的内容。但是表中的列名称并不是事件日志中的字段名,这里的显示名称会类似“n”或“ns:l”,或其他名称。如果查看每一列数据的详细信息,则与日志文件中的数据相吻合,如图7所示。
图7 将xml格式的系统日志导入Excel中显示
3 总结
本文介绍了通过PowerShell对Windows Vista和Windows Server 2008的事件日志进行管理的操作,包括使用Get-EventLog cmdlet生成可用的事件日志清单、使用同一个cmdlet查看、读取不同的事件日志。
作者: 付海军
版权:本文版权归作者所有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu/