本人管理者公司的服务器,有时服务器出了问题,就要上去查看系统日志,一直一来使用的都是系统自带的事件查看器,在使用过程中很是不方便:信息只能一条一条的看,没有相关的查询和过滤功能。一直想找个替代工具,不过一直也没有找到。
这几天在翻看从网上down的一本关于PowerShell的电子书,无意间看到了PowerShell对于查看系统日志的支持,使用的是Get-EventLog这个命令。我们先来看一下这个命令的用法:
Get - EventLog [ - list] [ - asString] [<CommonParameters > ]
第一个用法是查看具体日志用的,第二个用法可以列出系统中所有日志,我们先来看第二个用法的使用:
Max(K) Retain OverflowAction Entries Name
------ ------ -------------- ------- ----
512 7 OverwriteOlder 2 , 167 应用程序
512 7 OverwriteOlder 0 安全性
512 7 OverwriteOlder 2 , 629 系统
15 , 360 0 OverwriteAsNeeded 829 Windows PowerShell
上面的列表和我们在事件查看器中看到的应该是一样的(图片上传不上来,就不截图了).我们再来看第一个用法的使用:
Index Time Type Source EventID Message
----- ---- ---- ------ ------- -------
14429 四月 04 10 : 42 Info MsiInstaller 11707 Product: Quest PowerG
![](https://www.cnblogs.com/Images/dot.gif)
14428 四月 04 09 : 57 Info MSSQL $SQLEXPRESS 17403 服务器在空闲 1793 秒
![](https://www.cnblogs.com/Images/dot.gif)
14427 四月 04 09 : 43 Info MSSQL $SQLEXPRESS 17896 对于 id 为 1 的计划程
![](https://www.cnblogs.com/Images/dot.gif)
14426 四月 04 09 : 28 Info VMware Server 1103 Virtual machine was a
![](https://www.cnblogs.com/Images/dot.gif)
14425 四月 04 09 : 27 Info MSSQL $SQLEXPRESS 9688 已启动 Service Broker
![](https://www.cnblogs.com/Images/dot.gif)
-LogName后面跟上日志名称,-Newest指列出最近的几条。日志的名称应该就是我们在第二个用法演示中看到的Name列,不过在使用中文时它不能识别,只能使用英文系统下列出的名称:application、security、system。(这里说的不对,日志的名称应该是用Get-EventLog -AsString命令查看到的内容)
下面我们来看一下如果进行查询和过滤,这里使用的管道操作(提一下,PowerShell管道传递的是对象,不是字符):
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
PS C:\> Get-EventLog application |
>> Where-Object {$_.message -match "正在"} |
>> Format-List source,message |
>> more
>>
Source : MSSQL$SQLEXPRESS
Message : 正在启动数据库 'tempdb'。
Source : MSSQL$SQLEXPRESS
Message : 正在清除 tempdb 数据库。
Source : MSSQL$SQLEXPRESS
Message : 服务器正在侦听 ['any' <ipv4> 57964]。
Source : MSSQL$SQLEXPRESS
Message : 正在启动数据库 'msdb'。
Source : MSSQL$SQLEXPRESS
Message : 正在启动数据库 'model'。
Source : MSSQL$SQLEXPRESS
Message : 正在启动数据库 'mssqlsystemresource'。
Source : MSSQL$SQLEXPRESS
Message : 恢复操作正在数据库 'master' (1)中写入检查点。这只是一条信息性消息,不
需要用户执行任何操作。
<SPACE> next page; <CR> next line; Q quit
Where-Object后面的就是查询的表达式,你可以跟据你的需要来构造,Format-List后面跟上列表项,可列出你想列的信息,信息也会全部给列出来,最后的more是用来分屏显示的。如果你愿意,可以将输出信息重定向到一个文件里,方便你来查看。