您的位置:首页 > 运维架构 > Shell

PowerShell 2.0 实践(六)管理Windows日志

2010-08-24 21:40 459 查看
上一次我们对Windows注册表进行了简单的管理操作,重在理解"项"和"值"的概念。练习了新建、修改、删除、查看注册表项、值的命令,此外,借助于.NET框架,我们同样可以远程管理注册表,前提是远程计算机上的"Remote Registry"服务要启动。本次我们来重点关注一下Windows日志,Windows日志记录了各种软件、硬件发生的变化,当计算机出现问题时,方便管理员快速排错、恢复计算机等。尤其在一些软件安装失败时,根据日志中的EventID和详细信息能够帮助我们查找解决方案。

测试脚本下载

本系列所有脚本均在Windows
Server 2008 R2 DataCenter (PowerShell 2.0) + PowerGUI Script Editor Free
Edition x64中测试通过。

Windows日志按严重程度区分有5种类型:

Error

Warning

Information

SuccessAudit

FailureAudit

从名称就可以看出其相应含义,使用EventLogEntryType枚举可以查看这些类型:

[enum]::GetNames([System.Diagnostics.EventLogEntryType])

运行结果:



在【开始】à【运行】输入:eventvwr调出事件查看器,这里以Windows Server 2008 R2上的事件查看器为例,可以看到Windows内置的事件分类:



Windows按照程序、安全、安装程序、系统等对日志进行了分类,对程序和服务还进行了更细粒度的分类,方便管理员查看特定应用程序的日志。当然,我们可以添加自定义的分类,稍后将练习这种操作。

2、PowerShell 2.0中关于日志操作的命令有如下一些:

Get-EventLog

Get-WinEvent

New-EventLog

Clear-EventLog

Remove-EventLog

Show-EventLog

Write-EventLog

Limit-EventLog

查看日志分类列表。

Get-EventLog
–List

运行结果:



这里你可能会奇怪,怎么返回的分类这么少呢?刚才可是看到了很多的分类啊,这是因为从Windows Vista/2008开始,Windows使用了一种新的日志格式:.evtx,代替了之前的.evt,而Get-EventLog命令只能查看之前的日志格式。后面会看到如何查看.evtx格式的日志。

Get-EventLog提供了查看远程计算机上日志的能力,类似的,只需要添加-ComputerName参数即可:

PS:今天的远程测试有点杯具,本机连接VMWare中的虚拟机时老是有问题,一会提示RPC服务器不可用,一会认证失败,于是用两个虚拟机进行测试:

操作系统

IP

作用

Windows HPC Server 2008 R2

192.168.220.133

模拟本地计算机

Hyper-V 2008 R2

192.168.220.134

模拟远程计算机



Get-EventLog -ComputerName 192.168.220.134 –List

运行结果:



在Windows Vista/2008/7/2008R2中,可以使用Get-WinEvent查看.evtx格式的日志。

Get-WinEvent
-ListLog
* | Select LogName,RecordCount

运行结果:



远程调用时提示RPC服务器不可用,不知是哪里配置错了:



查看指定类别的最新日志。

Get-EventLog
-LogName
"Windows PowerShell"
-Newest 10 | Format-Table Index,Source,Message –AutoSize

运行结果:



远程调用结果:



对于.evtx格式,这样使用:

Get-WinEvent
-LogName
"Windows PowerShell"
-MaxEvents 10 | Format-Table EventID,Source,Message –AutoSize

运行结果:



.evtx格式远程调用依然出错:



6、筛选日志信息,Windows日志存储的内容非常多,如果不进行一些筛选,管理员难以获取有价值的信息。

如:筛选日志信息中包含【vmware】的日志,

Get-EventLog
-LogName
System | Where {$_.Message -like
"*vmware*"}

运行结果:



在【Windows PowerShell】类别中查询EventID小于500的日志信息:

Get-EventLog
-LogName
"Windows PowerShell" | Where {$_.EventID -lt 500}

运行结果:



使用Format-List可以查看详细信息:

Get-EventLog
-LogName
"Windows PowerShell" | Where {$_.EventID -lt 500} | Format-List


运行结果:



查询自昨天这个时候到今天这个时候的日志,并按照EventID排序、分组:

Get-EventLog
-LogName
"Windows PowerShell" | Where {$_.TimeWritten -gt ((Get-Date).AddDays(-1))} | Sort
EventID | Group
EventID

运行结果:



使用Get-WinEvent命令还可以使用一些高级命令来进行筛选。

使用Hashtable进行筛选,注意,只能在Win7/2008 R2上使用:

Get-WinEvent
-FilterHashtable @{LogName="Windows PowerShell";ProviderName="PowerShell"} | Where {$_.TimeCreated -gt (Get-Date).AddDays(-1)}

运行结果:



有效的键值对如下:

-- LogName=<String[]>

-- ProviderName=<String[]>

-- Path=<String[]>

-- Keywords=<Long[]>

-- ID=<Int32[]>

-- Level=<Int32[]>

-- StartTime=<DateTime>

-- EndTime=<DataTime>

-- UserID=<SID>

-- Data=<String[]>

-- *=<String[]>

通过XML来筛选。

在事件查看器中可以自定义筛选规则:



在Filter中填写项筛选的规则:



在XML选项卡中可以看到自动生成的代码:



将这段XML复制出来,在PowerShell中通过-FilterXml查询:

$xml
=
@'

<QueryList>

<Query Id="0" Path="Windows PowerShell">

<Select Path="Windows PowerShell">*[System[(Level=3) and TimeCreated[timediff(@SystemTime) <= 43200000]]]</Select>

</Query>

</QueryList>

'@

Get-WinEvent
-FilterXml
$xml

运行结果:



因为EventLog使用了内置的XML来存储,还可以使用XPath表达式进行筛选:

Get-WinEvent
-LogName
"System"
-FilterXPath
"*[System[EventID > 1000]]"

运行结果:



导入、导出日志。

Get-WinEvent
-ListLog
* | Export-Clixml
-Path
F:\PSTest\EventLog.clixml
-Force

Import-Clixml
-Path
F:\PSTest\EventLog.clixml | Group
Source

运行结果:



Clixml要优于csv格式,它将对象序列化为xml格式,方便后续的查询。

使用记事本来查看其存储结构:



读写日志。

创建一个类别为Script,来源为PSScript的日志类别:

New-EventLog
-LogName
Script
-Source
PSScript

运行结果:



向刚刚创建的这个类别中写入一条日志:

Write-EventLog
-LogName
Script
-Source
PSScript
-Message
"Test"
-EntryType
"Information"
-EventId 1

运行结果:



限制日志的容量,避免单个日志文件太大:

Limit-EventLog
-LogName
Script
-MaximumSize 2MB

运行结果:



调用Event Viewer查看日志:

Show-EventLog


运行后将打开事件查看器。

清空、删除日志(慎用):

Clear-EventLog
-LogName
Script

Remove-EventLog
-LogName
Script

小结:

本次我们练习了WIdnows系统日志的相关操作,重在设置不同的筛选条件来查询我们感兴趣的日志,熟练掌握这些命令后,将大大提高解决问题的效率。Get-WInEvent提供了一些高级的删选命令,如Hashtable、XPath、XML等,可酌情使用。类似的WIdnows日志同样允许远程操作,但是这次我遇到了很多问题,主要分为两类:RPC服务器不可用、无访问权限。关于PowerShell的远程管理是个很大的话题,后续篇章我们再讨论,现在我也在找原因。Windows自带了一个日志管理的命令行工具:wevtutil.exe,功能也很强大,后面我们专门来测试一下这个工具。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: