前言
我每月都要給各種不同的客戶做系統巡檢,其中Windows事件日誌檢查是比較耗時的事情。它會記錄許多的信息,特別是針對系統安全方面、系統故障排除方面有重要線索。我們可以通過一些事件關鍵字與信息,製作各種不同的腳本以便快速篩選過濾日誌。
一般來說,我們可以通過如下兩種方法實現日誌過濾:
- Powershell => Win自帶的命令行工具
- Log Parser 2.2 => 功能非常強大的第三方工具
PowerShell命令方法
Windows PowerShell提供兩種不同的命令方式:
-
Get-WinEvent => 功能強大,但運用複雜;
-
Get-EventLog => 簡單易用,可實時查詢;
# 過濾安全日誌的登錄成功與失敗日誌
Get-EventLog Security -InstanceId 4624,4625
PowerShell常用命令
1. 檢查服務器最近開關機時間
Function Get-ComputerUptimeHistory {
$q='
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">*[System[(EventID=6005 or EventID=6006)]]</Select>
</Query>
</QueryList>'
$events = Get-WinEvent -FilterXml $q
$i=-1
while ( $i+1 -lt $events.length ) {
if($i -eq -1)
{
[PSCustomObject]@{
StartTime = $events[0].TimeCreated;
StopTime = $null ;
UpTime = [datetime]::Now - $events[0].TimeCreated
}
}
else{
[PSCustomObject]@{
StartTime = $events[$i+1].TimeCreated;
StopTime = $events[$i].TimeCreated ;
UpTime = $events[$i].TimeCreated - $events[$i+1].TimeCreated
}
}
$i += 2
}
}
Get-ComputerUptimeHistory | ft -AutoSize
2. 最近登錄失敗的詳細信息
$xml='<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=4625)]]</Select>
</Query>
</QueryList>'
$events = Get-WinEvent -FilterXml $xml
$i=0
Write-Host '登錄時間','登錄賬號','登錄類型','登錄IP地址'
while ($i -lt $events.length) {
$time=$events[$i].TimeCreated
$type=[regex]::matches($events[$i].Message, '登錄類型:(.+)') | %{$_.Groups[1].Value.Trim()}
$user=([regex]::matches($events[$i].Message, '帳戶名:(.+)') | %{$_.Groups[1].Value.Trim()})[1]
$IP=[regex]::matches($events[$i].Message, '源網絡地址:(.+)') | %{$_.Groups[1].Value.Trim()}
Write-Host $time,$user,$type,$IP
$i++
}
登錄類型參考如下: